NLog

摘要:
使用NLog,您可以轻松地写入多个目标。NLog支持结构化和传统日志记录。NLog具有高性能、易于使用、易于扩展和灵活配置的特点。InternalLogFile:表示nlog日志执行日志的位置。通过NLog,我们不需要启动或关闭日志模块。程序关闭后,它将自动关闭日志。可以在internalLogFile配置的路径中查看相关Nlog的日志。在生产环境中,建议将internalLogLevelNLog自己的日志级别设置为Info,以便只记录关键日志信息。Tab=布局渲染器将NLog消息写入Splink Nuget以获取Splink库包https://www.nuget.org/packages/NLog.Targets.Splunk配置˂?
NLog官网:https://nlog-project.org/

 前言

  NLog是适用于各种.net平台(包括.net standard)的灵活而免费的日志记录平台。通过NLog, 可以轻松地写入多个目标。(数据库、文件、控制台), 并动态更改日志记录配置。
NLog支持结构化和传统日志记录。NLog的特点: 高性能、易于使用、易于扩展和灵活配置。

基本配置

  Nuget获取NLog库包:https://www.nuget.org/packages/NLog

<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="false"
      internalLogLevel="Info"
      internalLogFile="./logs/nlog-internal.log">

NLog 根节点以下几种配置需要注意

  • autoReload:配置修改是否自动加载。
  • throwExceptions:日志出现异常时是否需要抛出异常,若配置为true日志记录异常时由于没有捕获异常,会导致程序挂掉。
  • internalLogLevel:表示nlog日志的执行日志记录等级。
  • internalLogFile:表示nlog日志的执行日志记录的位置。通过./XXXX的方式可以配置到程序的相对目录。

日志等级

  Nlog支持以下几种日志等级

LevelFirstCharacterOrdinal
TraceT0
DebugD1
InfoI2
WarnW3
ErrorE4
FatalF5
OffO6


  在日志输入时可以通过${level}输入日志等级,或者通过${level:format=FirstCharacter}输出日志等级的简写,查看所有参数输出可以到这里查看。

  在代码中我们不支持Off等级的输出。通过NLog不需要我们认为对日志模块进行启动或关闭,在我们程序关闭后,它会自动关闭日志。相关的Nlog的日志可以在internalLogFile配置的路径中中查看到,同时在生产环境建议将internalLogLevelNLog自己的日志等级设置为Info,这样只会记录关键的日志信息。

我们输入到文件中,输入配置如下:

<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
<logger name="*" minlevel="Debug" writeTo="f" />

  具体layout配置:https://nlog-project.org/config/?tab=layout-renderers

将NLog消息写入Splunk 

 Nuget获取Splunk库包 https://www.nuget.org/packages/NLog.Targets.Splunk

 配置

<?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">
  <extensions>
    <add assembly="Nlog.Targets.Splunk"/>
  </extensions>
    <target
        name="SplunkLog"
        xsi:type="SplunkHttpEventCollector"
        ServerUrl="http://192.168.100.135:18088"
        Token="8AF31D06-6509-48C5-AAB3-A907FA65FF32"
        Channel="dev-erp-mes"
        RetriesOnError="0"
        IgnoreSslErrors="true"
        layout="${message} ${exception:format=tostring}"
        includeEventProperties="true"/>
  </targets>
  <rules>
    <logger name="*" levels="Info,Error,Warn,Debug,Fatal" writeTo="SplunkLog" />
  </rules>
</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">
  <extensions>
    <add assembly="Nlog.Targets.Splunk"/>
  </extensions>

  <targets async="true">
    <target name="asyncFile" xsi:type="File"
            layout="[${longdate}] [${level}] [${logger}] [${message}] ${newline} ${exception:format=tostring}"
            fileName="${basedir}/log/${shortdate}.txt"
            archiveFileName="${basedir}/log/archives/log.{#####}.txt"
            archiveAboveSize="102400000"
            archiveNumbering="Sequence"
            concurrentWrites="true"
            keepFileOpen="false"
            encoding="utf-8" />

    <target
        name="SplunkLog"
        xsi:type="SplunkHttpEventCollector"
        ServerUrl="http://192.168.100.135:18088"
        Token="8AF31D06-6509-48C5-AAB3-A907FA65FF32"
        Channel="dev-erp-mes"
        RetriesOnError="0"
        IgnoreSslErrors="true"
        layout="${message} ${exception:format=tostring}"
        includeEventProperties="true"/>

    <target name="console" xsi:type="console"/>
  </targets>

  <rules>
    <!--Info,Error,Warn,Debug,Fatal-->
    <logger name="*" levels="Info,Error,Warn,Debug,Fatal" writeTo="asyncFile" />
    <logger name="*" levels="Info,Error,Warn,Debug,Fatal" writeTo="SplunkLog" />
    <logger name="*" minlevel="Error" writeTo="console" />
  </rules>
</nlog>

ASP.NET Core 1和2以及Microsoft依赖注入

  Nuget获取NLog.Extensions.Logging库包:https://www.nuget.org/packages/NLog.Extensions.Logging/

NLog模板

  使用模板的原因:提升性能如果当日志等级不满足的情况下不会去执行字符串的格式处理

  错误代码

// 当日志等级不满足的情况下也会调用时间ToString()格式化时间
logger.Fatal($"时间:{DateTime.Now:yyyy-MM-dd hh:mm:ss}", DateTime.Now);

  正确使用如下默认格式 

  查看日志源代码

  public void Fatal<TArgument>([Localizable(false)] string message, TArgument argument)
        { 
            if (IsFatalEnabled)
            {
                WriteToTargets(LogLevel.Fatal, message, new object[] { argument });
            }
        }

  可以看出只有当IsFatalEnabled值为true才会执行日志模板格式化代码不

  一共有以下4种模板  

      var d = new { A = "xxx", b = "AAA" };

    默认格式

      //默认模板直接Convert.ToString()
      logger.Fatal("默认{name:yyyy-MM-dd hh:mm:ss}fffdweew", DateTime.Now);

      输出:默认2019-08-22 03:07:53fffdweew

    转义符

      //转义符
      logger.Fatal("转义{{name}}dddd", d);

      输出:转义{name}dddd

    引号   

      //加引号
      logger.Fatal("加引号{$name}sss", d);

      输出:加引号"{ A = xxx, b = AAA }"sss

    json序列化

      //序列化
      logger.Fatal("序列化{@name}sdsdsdsd", list);

      输出:序列化{"A":"xxx", "b":"AAA"}sdsdsdsd

  

免责声明:文章转载自《NLog》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows Server 2008服务器配置FTP站点的方法教程怎样诊断Service Broker问题 怎样诊断Service Broker问题zt下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.NET .Core 选择日志框架

先来介绍.NET中三种最受欢迎​​的日志记录框架:log4net,NLog和Serilog。 一、Log4net 1、Log4net概述   Log4Net有四种主要的组件,分别是Logger(记录器),Repository(库),Appender(附着器)以及 Layout(布局)。 Logger记录器   Logger是应用程序需要交互的主要组件,它用...

ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门

一、前言 1、本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义LoggerName分类记录到不同目录 ASP.NET Core + NLog 按文件大小归档记录本地日志 NLog配置文件常用配置项说明 2、本教...

NLog简单配置与使用

对项目添加NLog 安装完成后,在项目里面会自动引入该引入的dll,并且会添加如下两个文件   NLog的配置主要是在这个config文件里。当然也可以将这个文件里面的nlog节点复制到项目配置文件App.config/Web.config里面。  NLog的配置文件主要有3个节点variable,targets,rules。 variable节点用于...

NLog输出目标及类型

原文  http://www.cnblogs.com/tongyi/p/NLog.html targets:输出目标节点 target:配置一个输出目标 Type输出类型:   Console        输出到控制台   Debugger     输出到VS输出窗口   File        输出到文件   Mail        输出为邮件发...

ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件(转)

ASP.NET Core 系列目录 应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用。   ASP.NET Core提供了内置的日志,但没弄明白这么把它输出到文件, 只能在VS的输出中查看, 谁知道怎么弄告诉我一下。(ASP....