我正在使用扩展NLog的https://github.com/NLog/NLog/tree/master/examples/ExtendingLoggers/LoggerWrapper方法,以便可以向事件添加自定义属性。所以我的代码如下:
public void WriteMessage(string eventID, string message)
{
LogEventInfo logEvent = new LogEventInfo(LogLevel.Info, _logger.Name, message);
logEvent.Properties["EventID"] = eventID;
_logger.Log(typeof(MyLogger), logEvent);
}
在WriteMessage
方法中,我尝试获取调用方类和方法名称,如下所示:
logEvent.CallerClassName;
logEvent.CallerMemberName;
但都返回null。
如何获取值?
答案 0 :(得分:5)
就像您可以分配LogEventInfo.Exception
一样,您也可以分配LogEventInfo.CallerClassName
(或LogEventInfo.CallerMemberName
)。
如果为LogEventInfo.Exception
调用getter,则只会分配一个Exception对象。 LogEventInfo.CallerClassName
(或LogEventInfo.CallerMemberName
)也是如此
NLog Logger
负责捕获呼叫站点。 Logger
在接收到LogEventInfo
时执行捕获。捕获非常昂贵,并且仅在将目标配置为使用呼叫站点时才会发生。
不要试图自己走StackTrace。然后,您可能想利用呼叫者信息:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/caller-information
NLog正在通过使用呼叫者信息来改善呼叫站点的性能。参见https://github.com/NLog/NLog/pull/2527