簡體   English   中英

如何在.net Core中的nlog中記錄特定的數據和屬性

[英]How to log specific data and properties in nlog in .net core

我正在使用NLog在.net核心中記錄消息。

以下是為我完成日志記錄工作的方法。 它也能夠記錄屬性。 而且只有在我調用此方法時,它才會寫入文件。

    private static void WriteLog(LogEvent logEvent)
    {
        var log = LogManager.GetLogger(logEvent.Logger);

        LogEventInfo logMsg = new LogEventInfo();
        logMsg.Message = logEvent.Message;
        logMsg.Level = logEvent.LogLevel;
        logMsg.Properties.Add("Title", logEvent.Title);
        logMsg.Properties.Add("Name", "abc");
        if (!string.IsNullOrEmpty(logEvent.StackTrace))
        {
            logMsg.Properties.Add("StackTrace", "Stack Trace: " + logEvent.StackTrace + Environment.NewLine);
        }
        if (!string.IsNullOrEmpty(logEvent.InnerException))
        {
            logMsg.Properties.Add("InnerException", "Inner Exception: " + logEvent.InnerException + Environment.NewLine);
        }
        log.Log(logMsg);
    }

它不會記錄以下消息:

"Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext."

"Request starting HTTP/1.1 GET http://localhost:5000/api/"

我想通過將NLog添加到.net核心來實現類似的功能。 我在StartUp.cs中添加了NLog,如下所示:

loggerFactory.AddNLog();

但是通過以上述方式添加NLog,它將記錄與操作執行有關的所有消息。 但我不要這些消息。

我希望NLog使用LogInformation()記錄消息。 加上如何在此處傳遞'StackTrace''InnerException''StackTrace'屬性。

_logger.LogInformation("Home controller and Index action - logged");

要限制自動記錄的內容,您可能需要查看在nlog.config和Startup.cs中設置的記錄級別 例如,這將僅自動記錄“信息”或更高級別(警告,錯誤和致命)的消息,而不記錄“跟蹤”或“調試”消息。 它還將僅記錄名稱空間“ MyNamespace”中有關類的消息。

<rules>
    <!-- Level can be: Trace, Debug, Info, Warn, Error, Fatal  -->
    <logger name="MyNamespace.*" minlevel="Info" writeTo="DBLogger" final="true" />
</rules>

若要保存Exception和堆棧跟蹤,應改為使用_logger.Log()方法:

try { ... }
catch(Exception ex) {
   _logger.Log(LogLevel.Error, "Message", ex);
}

stacktrace將可用於記錄異常。

這是有關如何參數化保存的日志消息的一些其他信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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