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>