Nlog -添加深度数据

本文关键字:数据 深度 添加 Nlog | 更新日期: 2023-09-27 18:07:05

我目前正在做一个自定义安装程序,我公司的很多软件都使用一种特定的日志格式(我们有很多工具来分析它们),但是他们所有的程序都是用Delphi编写的,我正在做的项目使用c#,所以我不能直接重用库。

所以我试图格式化NLog的输出以适应我们的格式,同时仍然有一个"标准"输出,并能够直接在WPF控件中输出日志。

我们有所有常用的日志级别(调试,信息,警告,错误,…),但我们也有深度机制。基本上我们可以这样写:

log.Info("Hey");
log.BeginBlock("Some logs");
for(....)
{
    instructions;
    log.Error("...");
}
log.EndBlock();
log.Info(".");

基本上输出将是:

Time Deepness Message Warning Error
[TIME] 1 Hey 0 0
[TIME] 1 Some logs 0 0
[TIME] 2 ... 0 1
[TIME] 1 . 0 0

所以我想知道我是否可以用NLog做类似的事情,或者我是否应该考虑另一个日志框架

谢谢!

Nlog -添加深度数据

看一下Mapped Diagnostics Context布局渲染器。它允许您添加与代码一起流动的上下文信息。非常有用。

当您拥有希望当前线程上执行的每个日志记录器都可用的信息时,请使用映射的诊断上下文。由于映射的诊断上下文是线程本地的,因此必须在需要属性值的每个线程的上下文中配置所有属性。

示例用法:

MappedDiagnosticsContext.Set("PropertyName", "PropertyValue");

然后在日志配置中:

${mdc:item=PropertyName}

也许嵌套的嵌套诊断上下文布局渲染器是一个更好的选择,尽管缺少一些好的例子。

示例用法:

NestDiagnosticsContext.Push("entering method X");
...
NestDiagnosticsContext.Pop(); //leaving methods

然后在日志配置中:

${ndc}

另见NestedDiagnosticsContext类文档