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>