我正在编写一个自定义的NLog目标,继承自TargetWithLayout
,我希望根据特定的日志事件,可选择地写入堆栈跟踪。我已经定义了一个嵌套布局,类似于这样(语法可能不正确):
Layout layout = "${when:${event-properties:StackTraceEnabled}==true:${stacktrace}}";
而且我会创建类似这样的事件:
var logEventInfo = new NLog.LogEventInfo(NLog.LogLevel.Error, "Test", "Test")
{
Properties =
{
{ "StackTraceEnabled", true },
}
};
然而,这样做不起作用,似乎违背了 NLog 的设计。从我所了解的很少信息来看,NLog 会根据其注册的目标评估
GetStackTraceUsage()
,然后要么始终生成堆栈跟踪,要么从不生成。这是正确的吗?在事件级别上是否有自定义堆栈跟踪生成的方法?
StackTraceEnabled
==false
时不应该被渲染。 - Julian