NLog特性问题:在写日志时,是否可以考虑堆栈深度



我是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}的缩进。

最新更新