Nlog - 添加深度数据

时间:2016-09-15 15:54:13

标签: c# nlog

我目前正在开发自定义安装程序,我公司的很多软件都使用特定的日志格式(我们有很多工具可以分析它们),但是他们所有的程序都是用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做类似的事情,或者我是否应该考虑另一个Log框架

谢谢!

2 个答案:

答案 0 :(得分:0)

看看Ultimate Django。它允许您添加与代码一起流动的上下文信息。非常有用。

  

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

使用示例:

${mdc:item=PropertyName}

然后在日志配置中:

 AutoItX.WinWait("[CLASS:CalcFrame]", "", 10);
 var win = AutoItX.WinGetHandle("[CLASS:CalcFrame]");
 string strReturnText = AutoItX.WinGetText(win).Trim();

答案 1 :(得分:0)

也许嵌套Nested Diagnostics Context layout renderer是一个更好的选择,虽然缺少一些好的例子。

使用示例:

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

然后在日志配置中:

${ndc}

另请参阅NestedDiagnosticsContext class docs