天天看點

Asp.Net Core 使用NLog

1.安裝

NLog

NLog.Web.AspNetCore

2.NLogHelper.cs

using NLog;

using System;

namespace test.Repository
{
    /// <summary>
    /// Nlog日志幫助類
    /// Trace 包含大量的資訊,例如 protocol payloads。一般僅在開發環境中啟用, 僅輸出不存檔案。
    /// Debug  比 Trance 級别稍微粗略,一般僅在開發環境中啟用, 僅輸出不存檔案。
    /// Info 一般在生産環境中啟用。
    /// Warn 一般用于可恢複或臨時性錯誤的非關鍵問題。
    /// Error 一般是異常資訊。
    /// Fatal - 非常嚴重的錯誤!
    /// </summary>
    public class NLogHelper
    {
        readonly Logger logger;

        private NLogHelper(Logger logger)
        {
            this.logger = logger;
        }

        /// <summary>
        /// 自定義 ${logger} (我用于區分檔案夾)
        /// </summary>
        /// <param name="name"></param>
        public NLogHelper(string name) : this(NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetLogger(name))
        {
        }

        /// <summary>
        /// 預設 ${logger} (Default 檔案夾下)
        /// </summary>
        public static NLogHelper Default { get; private set; }
        static NLogHelper()
        {
            Default = new NLogHelper(NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetLogger("Default"));
        }
        /// <summary>
        /// 比 Trance 級别稍微粗略,一般僅在開發環境中啟用, 僅輸出不存檔案
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="args"></param>
        public void Debug(string msg, params object[] args)
        {
            logger.Debug(msg, args);
        }
        /// <summary>
        /// 比 Trance 級别稍微粗略,一般僅在開發環境中啟用, 僅輸出不存檔案
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="err"></param>
        public void Debug(string msg, Exception err)
        {
            logger.Debug(err, msg);
        }
        /// <summary>
        /// 一般在生産環境中啟用。
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="args"></param>
        public void Info(string msg, params object[] args)
        {
            logger.Info(msg, args);
        }
        /// <summary>
        /// 一般在生産環境中啟用。
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="err"></param>
        public void Info(string msg, Exception err)
        {
            logger.Info(err, msg);
        }
        /// <summary>
        /// 包含大量的資訊,例如 protocol payloads。一般僅在開發環境中啟用, 僅輸出不存檔案
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="args"></param>
        public void Trace(string msg, params object[] args)
        {
            logger.Trace(msg, args);
        }
        /// <summary>
        /// 包含大量的資訊,例如 protocol payloads。一般僅在開發環境中啟用, 僅輸出不存檔案
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="err"></param>
        public void Trace(string msg, Exception err)
        {
            logger.Trace(err, msg);
        }
        /// <summary>
        /// 一般是異常資訊。
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="args"></param>
        public void Error(string msg, params object[] args)
        {
            logger.Error(msg, args);
        }
        /// <summary>
        /// 一般是異常資訊。
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="err"></param>
        public void Error(string msg, Exception err)
        {
            logger.Error(err, msg);
        }
        /// <summary>
        ///  非常嚴重的錯誤
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="args"></param>
        public void Fatal(string msg, params object[] args)
        {
            logger.Fatal(msg, args);
        }
        /// <summary>
        ///  非常嚴重的錯誤
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="err"></param>
        public void Fatal(string msg, Exception err)
        {
            logger.Fatal(err, msg);
        }
    }
}
           

3.nlog.config (Web項目根目錄下)

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Warn"
      internalLogFile="Logs\internal-nlog.txt">

	<!-- 啟用asp.net核心布局渲染器 -->
	<extensions>
		<add assembly="NLog.Web.AspNetCore"/>
	</extensions>

	<targets>
		<!-- 寫入檔案配置 -->
		<!-- 将日志寫入檔案  -->
		<target xsi:type="File" name="allfile" fileName="Logs\nlog-all-${shortdate}.log"
				layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring} ${newline}" />

		<!-- 另一個檔案日志,隻有自己的日志。使用一些ASP.NET核心渲染器 -->
		<target xsi:type="File" name="ownFile-web" fileName="Logs\nlog-own-${shortdate}.log"
				layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action} ${newline}" />
	</targets>

	<rules>
		<!--所有日志,包括來自Microsoft的-->
		<!--minlevel 改為Trace 跟蹤全部 Error 隻捕獲異常-->
		<logger name="*" minlevel="Trace" writeTo="allfile" />

		<!--跳過非關鍵的Microsoft日志,是以隻記錄自己的日志-->
		<logger name="Microsoft.*" maxlevel="Info" final="true" />
		<!-- BlackHole without writeTo -->
		<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
	</rules>
</nlog>

           

繼續閱讀