簡體   English   中英

NLog-如何以編程方式獲取調用方的類名和方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM