.net core 中使用Nlog

通过nuget安装Nlog 或者右击项目 编辑项目文件添加Nlog配置然后还原nuget程序包

          <ItemGroup>
          <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" />
          <PackageReference Include="NLog" Version="4.6.7" />
        </ItemGroup>
        

新建一个配置文件配置Nlog

<?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">

 <targets>
    <!--此部分中的所有目标将自动异步-->
    <target name="asyncFile" xsi:type="AsyncWrapper">
      <!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
      <target name="log_file" xsi:type="File"
              fileName="${basedir}/Logs/${shortdate}/${logger}-${level}-${shortdate}.txt"
              layout="${longdate} | ${message} ${onexception:${exception:format=message} ${newline} ${stacktrace} ${newline}"
              archiveFileName="${basedir}/archives/${logger}-${level}-${shortdate}-{#####}.txt"
              archiveAboveSize="102400"
              archiveNumbering="Sequence"
              concurrentWrites="true"
              keepFileOpen="false" />
    </target>
    <!--使用可自定义的着色将日志消息写入控制台-->
    <target name="colorConsole" xsi:type="ColoredConsole" layout="[${date:format=HH\:mm\:ss}]:${message} ${exception:format=message}" />
  </targets>

  <!--规则配置,final - 最终规则匹配后不处理任何规则-->
  <rules>
    <logger name="Microsoft.*" minlevel="Info" writeTo="" final="true" />
    <logger name="*" minlevel="Info" writeTo="asyncFile" />
    <logger name="*" minlevel="Warn" writeTo="colorConsole" />
  </rules>
</nlog>

在Program文件中添加nlog配置

     public static IHostBuilder CreateHostBuilder(string[] args) =>
          Host.CreateDefaultBuilder(args)
              .ConfigureWebHostDefaults(webBuilder =>
              {
                  webBuilder.UseStartup<Startup>();
              }).ConfigureLogging(logging =>
              {
                  logging.ClearProviders();
                  logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
              }).UseNLog();
              
         

使用

    public class HomeController : Controller
        {
            private readonly ILogger<HomeController> _logger;
            public HomeController(ILogger<HomeController> logger)
            {
                _logger = logger;
            }
            public IActionResult Index()
            {
                _logger.LogInformation("我是一条信息");
                return Content("Hello world");
            }
        }

配置 nlog【标签】

  autoReload 修改配置文件后是否允许自动加载无须重启程序
  throwExceptions 内部日志系统抛出异常
  internalLogLevel 可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭
  internalLogFile 内部日志文件位置 
  建议throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。

targets【目标】:

  每个目标由一个target元素表示。每个目标需要两个属性:

  name - 目标名称
  type - 目标类型 - 例如“文件”,“数据库”,“邮件”。使用名称空间时,此属性已命名xsi:type。
    Chainsaw|ColoredConsole |Console |Database|Debug|Debugger|EventLog|File|LogReceiverService|Mail|Memory|MethodCall|Network   |      NLogViewer|Null |OutputDebugString|PerfCounter|Trace|WebService
    不过常用的还是 File \Database \Colored Console\ Mail
    layouts 用来规定布局样式,语法“${属性}”,可以把上下文信息插入到日志中
  fileName 文件保存的地址
  archiveFileName 要用于存档的文件的名称
  archiveAboveSize 大小为字节的日志文件将自动存档(Sequence,Rolling Date):序列样式编号,滚动样式编号,日期样式编号
  concurrentWrites 并发写入(true:false)
  keepFileOpen 保持文件打开(true:false)
  

Layout【布局】

 几种常见的
${var:basePath} basePath是前面自定义的变量
${longdate} 日期格式 长时间
${shortdate}日期格式 短时间
${date:yyyyMMddHHmmssFFF} 日期 20170117165803866
${message} 输出内容
${guid} guid
${level}日志记录的等级
${logger} 配置的logger

rules【规则】

说明:

  规则是logger具有以下属性的元素:
  name - 记录器名称过滤器 - 可能包含通配符(*和?)
  minlevel - 记录的最低级别
  maxlevel - 记录的最高级别
  level - 单级记录
  levels - 逗号分隔的记录级别列表
  writeTo - 逗号分隔的要写入的目标列表
  final - 最终规则匹配后不处理任何规则
  enabled- 设置为false禁用规则而不删除它
  ruleName- 规则标识符,允许使用Configuration.FindRuleByName和进行规则查找Configuration.RemoveRuleByName。在NLog 4.6.4中引入
  注意:虽然命名了规则logger,但它没有定义记录器。它引用一个或多个记录器。
  通过将规则name模式与记录器名称匹配,将规则映射到记录器。规则name属性可以包括通配符(*和?),以通过通配符匹配来匹配记录器名称。
  * - 匹配0个或更多字符
  ? - 恰好匹配1个字符

NLog记录等级

Trace - 最常见的记录信息,一般用于普通输出
Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
Info - 信息类型的消息
Warn - 警告信息,一般用于比较重要的场合
Error - 错误信息
Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
自上而下,等级递增。

Logger发邮件参数

smtpServer=“*****” 邮件服务器 例如126邮箱是smtp.126.com
smtpPort=“25“端口
smtpAuthentication=“Basic“ 身份验证方式 基本
smtpUserName=“*****“ 邮件服务器用户名
smtpPassword=“******”邮件服务器密码
enableSsl=“false”是否使用安全连接 需要服务器支持
addNewLines=“true” 开头与结尾是否换行
from=“****” 发件邮箱
to=“XXXX@XX.com,XXXXX@XX.com”收件邮箱 多个以逗号分隔
subject=“subject:${machinename}报错“ 邮件主题
header=“---------------------开头-------------------------“ 邮件开头
body=“${newline}${message}${newline}“ 邮件内容
footer=“---------------------结尾-------------------------“ 邮件结尾

例子:

    <?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"
        xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
        autoReload="true"
        throwExceptions="true"
        internalLogLevel="Off"
        internalLogFile="c:\temp\nlog-internal.log">
      <variable name="basePath" value="地址"/>
      <targets>
      <target xsi:type="Mail"
          name="SendMail"
          smtpServer="你的邮件服务器"
          smtpPort="你的邮件服务器端口"
          smtpAuthentication="Basic"
          smtpUserName="你的邮件服务器名"
          smtpPassword="你的邮件服务器密码"
          enableSsl="false"
          addNewLines="false"
          from="你的发件邮箱"
          to="你的收件邮箱"
          subject="subject:${machinename}报错"
          header="---------------------开头-------------------------"
          body="${newline}${message}${newline}"
          footer="---------------------结尾-------------------------"
          encoding="UTF-8"/>
      </targets>
      <rules>
      <logger name="*" level="Error"  writeTo="SendMail"></logger>
      </rules>
    </nlog>