我是NLog.
的新手,但我以前有处理日志文件/跟踪文件的经验,但以前的日志如下:
<timestamp> ... | main function logging
<timestamp> ... | sub function logging.1
<timestamp> ... | subsub function logging.1.1
<timestamp> ... | subsub function logging.1.2
<timestamp> ... | sub function logging.2
<timestamp> ... | subsub function logging.2.1
<timestamp> ... | subsubsub function logging.2.1.1
...
正如您所看到的,缩进是根据调用堆栈中的深度完成的
在NLog
技术(NLog.xml
文件(中,我看到了depth
属性,但我认为这只是为了限制日志数量,基于调用堆栈深度,我没有看到任何缩进配置。
NLog
是否具有基于调用堆栈深度添加缩进的功能?
一旦您开始使用线程或异步任务,那么您就突然不得不忽略许多Microsoft特定的StackFrames。此外,当与其他使用事件处理程序并调用代码的库混合时,缩进可能会突然变得奇怪。同时,捕获每个LogEvent的StackTrace的开销将对性能产生影响。
另一种选择是使用类名称空间/内部类来提供缩进,可以从NLog${logger}:中提取
namespace ApplicationName
{
class Program
{
static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
}
}
namespace ApplicationName.Controllers
{
class MyController
{
static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
}
}
namespace ApplicationName.Models
{
class MyModel
{
static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
class InnerLogic
{
static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
}
}
}
另一种选择是使用带有NLog ScopeContext的嵌套状态,它可以提供带有NLog${scopeindent}的缩进。