RavenDB.StructuredLogger 7.1.0

dotnet add package RavenDB.StructuredLogger --version 7.1.0                
NuGet\Install-Package RavenDB.StructuredLogger -Version 7.1.0                
此命令意在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="RavenDB.StructuredLogger" Version="7.1.0" />                
对于支持 PackageReference 的项目,将此 XML 节复制到项目文件中以引用此包。
paket add RavenDB.StructuredLogger --version 7.1.0                
#r "nuget: RavenDB.StructuredLogger, 7.1.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互式工具或脚本的源代码中,以引用此包。
// Install RavenDB.StructuredLogger as a Cake Addin
#addin nuget:?package=RavenDB.StructuredLogger&version=7.1.0

// Install RavenDB.StructuredLogger as a Cake Tool
#tool nuget:?package=RavenDB.StructuredLogger&version=7.1.0                

RavenDB.StructuredLog

一个使用 RavenDB 存储结构化日志的 ASP.NET Core 日志记录器。

<a href="https://andrewlock.net/creating-an-extension-method-for-attaching-key-value-pairs-to-scope-state-using-asp-net-core/">结构化日志</a> 使用 RavenDB 作为日志存储。

旧、丑陋的日志方式会导致成千上万不可见的日志

但是,使用结构化和分组日志,您可以获得更少的日志,将类似的日志分组在一起,使其可搜索

{
    "MessageTemplate": "User {email} signed in at {date}",
    "Level": "Information",
    "OccurrenceCount": 1032,
    "FirstOccurrence": "2017-09-27T17:29:46.6597966+00:00",
    "LastOccurrence": "2017-09-27T17:39:50.5554997+00:00",
    "Occurrences": [
        {
            "Message": "User [email protected] signed in at 5:13 Oct 7",
            "Level": "Information",
            "Created": "2017-09-27T17:39:48.4248681+00:00",
            "Category": "Sample.Controllers.HomeController",
            "EventId": null,
            "TemplateValues": {
                "{OriginalFormat}": "User {email} signed in at {date}",
                "email": "[email protected]",
                "date": "5:13 Oct 7"
            }
        },
        {
            "Message": "User [email protected] signed in at 2:25 Nov 8",
            "Level": "Information",
            "Created": "2017-09-27T17:39:48.4248681+00:00",
            "Category": "Sample.Controllers.HomeController",
            "EventId": null,
            "TemplateValues": {
                "{OriginalFormat}": "User {email} signed in at {date}",
                "email": "[email protected]",
                "date": "2:25 Nov 8"
            }
        }
    ]
}

最终结果是,人类可以轻松理解软件中发生的错误以及其出现频率。此外,与老式日志不同,其中日志是巨大的不可见字符串,结构化日志因模板值的提取和存储在日志消息之外而可搜索。

说明

  1. 在 Startup.cs 中
public void ConfigureServices(IServiceCollection services)
{
	// Create your Raven doc store
	var docStore = new DocumentStore { ... };

	// Recommended: 
	// Avoid logging objects that contain self referenced loops.
	// Must be done before .Initialize().
	docStore.IgnoreSelfReferencingLoops();
	
	docStore.Initialize();

	// Add RavenDB structured logging.
	services.AddRavenStructuredLogger(docStore);  // docStore may be omitted if it's already in the DI container

	...
}
  1. 像平常一样在控制器和 服务中使用日志记录
public class HomeController : Controller 
{
	private ILogger<HomeController> logger;

	public HomeController(ILogger<HomeController> logger)
	{
		this.logger = logger;
	}

	public string Get()
	{
		// Simple logging
		logger.LogInformation("Hi there!");

		// Logging with templates
		logger.LogInformation("The time on the server is {time}.", DateTime.UtcNow);

		// Logging exceptions
		logger.LogError(exception, "Woops, an error occurred");
		
		// Logging exceptions with templates
		logger.LogError(exception, "Woops, an error occurred executing {action} at {date}", this.ControllerContext.ActionDescriptor.ActionName, DateTime.UtcNow);

		// Logging with scopes
		using (logger.BeginScope(42))
		{
			logger.LogInformation("This message will have forty-two stored with it");
		}

		// Logging with multiple scopes and scope templates.
		using (logger.BeginScope(42))
		using (logger.BeginScope("The current user is {user}", User.Identity.Name))
		using (logger.BeginKeyValueScope(nameof(totalCount), totalCount))
		{
			logger.LogInformation("This log will contain forty-two, the current signed in user name, and a key-value pair containing the name of the totalCount variable and its value.");
		}
		
		...
	}
}
  1. 完成!

需要帮助?请参阅 示例应用

产品 兼容和额外的计算目标框架版本。
.NET net8.0 支持兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于目标框架.NET Standard的信息。

NuGet 包

此包未由任何 NuGet 包使用。

GitHub 仓库

此包未由任何流行的 GitHub 仓库使用。

版本 下载 最后更新
7.1.0 107 3/26/2024
7.0.0 137 1/13/2024
6.0.1 800 9/2/2020
6.0.0 449 7/26/2020
5.1.0 480 5/15/2020
5.0.0 777 11/28/2019
4.2.1 566 9/11/2019
4.2.0 504 9/9/2019
4.1.0 515 9/4/2019
4.0.8 646 5/16/2019
4.0.7 1,020 8/15/2018
4.0.6 899 8/13/2018
4.0.5 949 7/10/2018
4.0.4 1,066 7/3/2018
4.0.3 1,172 3/13/2018
4.0.2 1,050 3/13/2018
4.0.1 1,116 2/12/2018
4.0.0 1,089 2/11/2018
2.0.2 1,096 1/11/2018
2.0.1 1,242 11/27/2017
2.0.0 1,151 10/17/2017
1.0.1 1,067 10/3/2017
1.0.0 1,087 9/27/2017

初始化与现代 ASP.NET 应用中的 CreateBuilder()协同工作