[英]NLog - How do I get caller class name and method programmatically?
我正在使用擴展NLog的https://github.com/NLog/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。
如何獲得這些值?
就像可以分配LogEventInfo.Exception
一樣,也可以分配LogEventInfo.CallerClassName
(或LogEventInfo.CallerMemberName
)。
如果分配了LogEventInfo.Exception
的getter方法,則只會返回一個Exception對象。 LogEventInfo.CallerClassName
(或LogEventInfo.CallerMemberName
)也是如此
NLog Logger
負責捕獲呼叫站點。 Logger
在接收到LogEventInfo
時執行捕獲。 捕獲非常昂貴,並且僅在將目標配置為使用呼叫站點時才會發生。
而不是試圖自己走StackTrace。 然后,您可能想利用呼叫者信息: https : //docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/caller-information
NLog正在通過使用呼叫者信息來改善呼叫站點的性能。 參見https://github.com/NLog/NLog/pull/2527
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.