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
NuGet 团队不为此客户端提供支持。请联系其 维护者 以寻求支持。
#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
NuGet 团队不为此客户端提供支持。请联系其 维护者 以寻求支持。
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 作为日志存储。
旧、丑陋的日志方式会导致成千上万不可见的日志
- "用户 [email protected] 于 10 月 7 日 5:13 登录"
- "用户 [email protected] 于 11 月 8 日 2:25 登录"
- "用户 [email protected] 于 11 月 21 日 3:18 登录"
- "用户 [email protected] 于 12 月 15 日 0:0 登录"
- [以及更多 1000 多个条目 - ouch!]
但是,使用结构化和分组日志,您可以获得更少的日志,将类似的日志分组在一起,使其可搜索
{
"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"
}
}
]
}
最终结果是,人类可以轻松理解软件中发生的错误以及其出现频率。此外,与老式日志不同,其中日志是巨大的不可见字符串,结构化日志因模板值的提取和存储在日志消息之外而可搜索。
说明
- 在 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
...
}
- 像平常一样在控制器和 服务中使用日志记录
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.");
}
...
}
}
- 完成!
需要帮助?请参阅 示例应用。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET | net8.0 支持兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
-
net8.0
- Microsoft.AspNetCore.Hosting.Abstractions (>= 2.2.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection (>= 8.0.0)
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- RavenDB.Client (>= 6.0.2)
- System.Reactive (>= 6.0.0)
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()协同工作