C#中使用Nlog日志工具

时间:2025-03-26 07:42:38

C#中使用Nlog日志工具

安装

通过Nuget安装,搜索Nlog, 然后安装NLog和(相当于一个配置模板)。

当然也可以自己在项目根目录下创建一个配置文件,注意在的属性中设置 Copy to Output Directory: Copy always

基本目录结构

<?xml version="1.0" ?>
<nlog>
    <targets>
        <target></target>
        <target></target>
    </targets>
    <rules>
        <logger></logger>
        <logger></logger>
    </rules>
</nlog>

targets下面配置日志相关参数,比如日志存放的地址,名称,格式,大小等

rules下面配置目标输出规则 ,就是targets下面配置的在rules中使用。

使用模板

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="/schemas/"
      xmlns:xsi="http:///2001/XMLSchema-instance"
      xsi:schemaLocation="/schemas/ "
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\">

  <!-- optional, add some variables
  /nlog/NLog/wiki/Configuration-file#variables
  -->
  <variable name="myvar" value="myvalue"/>

  <!--
  See /nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->
  <targets>

    <!--
    add your targets here
    See /nlog/NLog/wiki/Targets for possible targets.
    See /nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
    -->

    <!--
    Write events to a file with the date in the filename.
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
    -->

    <target name="info" xsi:type="File" fileName="${basedir}/logs/info/log_${shortdate}.log" archiveAboveSize="500000"  encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
    <target name="debug" xsi:type="File" fileName="${basedir}/logs/debug/log_${shortdate}.log" archiveAboveSize="500000"  encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
    <target name="error" xsi:type="File" fileName="${basedir}/logs/error/log_${shortdate}.log" archiveAboveSize="500000"  encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
    <target name="trace" xsi:type="File" fileName="${basedir}/logs/trace/log_${shortdate}.log" archiveAboveSize="500000"  encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
    <target name="warn" xsi:type="File" fileName="${basedir}/logs/warn/log_${shortdate}.log" archiveAboveSize="500000"  encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>
    <target name="console" xsi:type="ColoredConsole"  encoding="utf-8" layout="${longdate} ${callsite} [${level}]: ${message}"/>

  </targets>

  <rules>
    <!-- add your logging rules here -->
    <logger name="*"  level="Debug" writeTo="debug" />
    <logger name="*"  level="Info" writeTo="info"/>
    <logger name="*" level="Warn" writeTo="warn"/>
    <logger name="*" level="Trace" writeTo="trace"/>
    <logger name="*" level="Error" writeTo="error"/>
    <!--添加必要的规则-->
    <logger name="*" minlevel="Trace" writeTo="console"/>
    <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
    <logger name="*" minlevel="Debug" writeTo="f" />
    -->
  </rules>
</nlog>

添上argets ,和rules中的内容,模板用的Nuget下载的。


简单使用

 logger = (); 

("********");
("********");
("********");
("********");

##配置信息

###基本配置·

NLog 根节点 下的配置

  • autoReload:配置修改是否自动加载。

  • throwExceptions:日志出现异常时是否需要抛出异常,若配置为true日志记录异常时由于没有捕获异常,会导致程序挂掉。

  • internalLogLevel:表示nlog日志的执行日志记录等级。

  • internalLogFile:表示nlog日志的执行日志记录的位置。通过./XXXX的方式可以配置到程序的相对目录。

    日志等级

    Level FirstCharacter Ordinal
    Trace T 0
    Debug D 1
    Info I 2
    Warn W 3
    Error E 4
    Fatal F 5
    Off O 6

target (目标)

<targets async="true">  <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"            layout="${longdate} ${uppercase:${level}} ${message}" /></targets>

通过将async设置为true可以异步保存日志,从而防止日志影响业务性能。

####xsi:type

输入类型,支持以下类型。

  • ColoredConsole : 使用可自定义的颜色将日志消息写入控制台。

  • Console - 将日志消息写入控制台。

  • Debug - 模拟目标-用于测试。

  • File - 将日志消息写入一个或多个文件。

  • Mail - 使用 smtp 协议或拾取文件夹通过电子邮件发送日志邮件。

  • Null - 丢弃日志消息。主要用于调试和基准测试

    具体参数说明
    <targets async= Boolean”>  //是否异步
      <target
     xsi:type="File"               //输出类型
              name="String"                //节点名称
              layout="Layout"             //日志输入格式
              header="Layout"             //日志头显示的文本内容
              footer="Layout"             //日志尾显示的文本内容
              encoding="Encoding"        //文件编码格式
              lineEnding="Enum"          //行结束模式
              archiveAboveSize="Long"            //存档上限值
              maxArchiveFiles="Integer"         //保存的最大存档文件数,默认9
              archiveFileName="Layout"          //存档文件名称。允许使用Layout
              archiveNumbering="Enum"           //存档文件的编号方式
              archiveEvery="Enum"                //是否在每个设定时间刻自动存档日志文件
              replaceFileContentsOnEachWrite="Boolean"  //是否覆盖每次写入的日志内容,默认false
              fileAttributes="Enum"                 //文件属性(只支持Windows)
              fileName="Layout"    //写入日志的文件名称 支持Layout
              deleteOldFileOnStartup="Boolean"   //启动时,是否删除旧的日志文件 。默认为false
              enableFileDelete="Boolean"    //否允许删除日志文件。默认为true
              createDirs="Boolean"           //是否允许自动创建(不存在的)目录。默认为true。
              concurrentWrites="Boolean"  //是否允许使用通过多个进程的方式,将日志信息并行写入文件中。,默认为true
              openFileCacheTimeout="Integer"  //文件保持打开状态的最大时间秒数
              openFileCacheSize="Integer"   //保持打开状态的文件数量
              networkWrites="Boolean"  //是否通过多线程由不同的网络主机并行向文件中写入日志默认false
              concurrentWriteAttemptDelay="Integer"
              concurrentWriteAttempts="Integer"
              bufferSize="Integer"  //日志文件缓存区大小(字节) 默认值为32768(32KB)
              autoFlush="Boolean"   //在每次日志信息后,是否自动刷新文件缓存区 默认true
              keepFileOpen="Boolean" //是否保持日志文件处于打开状态,以代替其在每次日志写事件发生时频繁打开和关闭默认值为false。
    备注:设置此属性为true,有助于提高性能。
    />
    </targets>
    

rules(规则)

<rules>    <logger name="*" minlevel="Debug" writeTo="f" />  </rules>

Nlog节点下添加rules节点,rules节点下可以配置多个logger节点,每个logger节点即为一条约束。

  • name:logger名称,若为*则表示适用于所有日志,若我们某个target专门用于类的日志输出,则那么可以设置为.*,表示当前约束只允许命名空间为开头的日志输出。
  • minlevel:表示当前约束的最小等级,只有等于或大于该值的日志等级才会被记录。
  • writeTo:表示当前规则约束哪个target

参考文章

/jun502525164/article/details/40352253

/xishining/article/details/85219755

/itjeff/p/

相关文章