日志学习系列(三)——NLog基础知识

  前边我们解释了log4net的学习,我们再介绍一下NLog

一、什么是NLog

  NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。NLog是一个简单灵活的.NET日志记录类库。

  通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。

  NLog遵从BSD license,即允许商业应用且完全开放源代码。任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议。
  NLog支持.NET、C/C++以及COM interop API,因此我们的程序、组件、包括用C++/COM 编写的遗留模块都可以通过同一个路由引擎将信息发送至NLog中。

二、NLog和Log4net的区别

  NLog的API非常类似于log4net,且配置方式非常简单。NLog使用路由表(routing table)进行配置,但log4net却使用层次性的appender配置,这样就让NLog的配置文件非常容易阅读,并便于今后维护。

三、NLog配置介绍

  

  1、下面的配置是nlog的基础配置结构

<?xml version="1.0" encoding="utf-8" ?>
<!-- 默认命名空间 -->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd">
  <!-- 这个命名空间里面的元素或者属性就必须要以xsi:这种方式来写,比如schemaLocation就是他的一个属性,所以写成xsi:schemaLocation。
  而默认命名空间不带类似xsi这种;其实xml标签名称有个专业叫法叫做QName,而如果没有前面的xsi:这种一般叫做NCName -->
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <!--表示把定义这个命名空间的schema文件给引用进来,好让开发类型工具能够解析和验证你的xml文件是否符合语法规范
  简单来说 上面是用来验证你XML格式是否正确的。-->
  xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
  <!--一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。-->
  autoReload="true"
  <!--NLog日志系统抛出异常-->
  throwExceptions="false"
  <!--日志级别 -->
  internalLogLevel="Debug"
  <!--NLog内部日志文件位置 -->
  internalLogFile="c:\temp\nlog-internal.log">
  <!--variable定义配置文件中用到的变量-->
<variable name="myvar" value="myvalue"/>
  <!--定义日志的目标/输出-->
  <targets> </targets>
  <!--定义日志的路由规则-->
  <rules> </rules>
</nlog>

  2、NLog的重要配置说明

扫描二维码关注公众号,回复: 4053842 查看本文章

    (1)Layout布局

      几种常见的

      ${var:basePath} basePath是前面自定义的变量
      ${longdate} 日期格式 2017-01-17 16:58:03.8667
      ${shortdate}日期格式 2017-01-17 
      ${date:yyyyMMddHHmmssFFF} 日期 20170117165803866
      ${message} 输出内容
      ${guid} guid
      ${level}日志记录的等级
      ${logger} 配置的logger

    (2)NLog记录等级

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

    (3)NLog等级使用

      指定特定等级 如:level="Warn" 
      指定多个等级 如:levels=“Warn,Debug“ 以逗号隔开
      指定等级范围 如:minlevel="Warn" maxlevel="Error"

    (4)Logger使用

      从配置文件读取信息并初始化 两种常用的方式

      方法一:根据配置的路由名获生成特定的logger:

         Logger logger = LogManager.GetLogger("LoggerDemo");

      方法二:初始化为当前命名空间下当前类的logger :

        Logger logger = LogManager.GetCurrentClassLogger();

    区别是logger的name不一样 前者是LoggerDemo,后者是当前命名空间+点+当前类名 如类比较多,并且往同一个日志文件记录,建议用GetCurrentClassLogger

    (5)Logger有以下三种常用的写入方式

      logger.Error("这是DatabaseDemo的错误信息");
      logger.Error(“ContentDemo {0}:{1}”,“时间”,DateTime.Now.ToString());需要拼接字符串的话推荐这种,NLog做了延迟处理,用的时候才拼接。
      logger.Log(LogLevel.Error, "这是ContentDemo");

    (6)Logger发邮件参数

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

  3、NLog实例

  

<?xml version="1.0" encoding="utf-8" ?>
<!--nlog教程详情:http://www.cnblogs.com/dflying/archive/2006/12/04/581750.html-->

<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="Off" internalLogFile="c:\temp\nlog-internal.log">

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

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

    <!--
    add your targets here
    See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    See https://github.com/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="console" xsi:type="Console"/>
    <target name="file" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log"
      layout="${longdate} ${callsite} ${level}:${message} ${event-context:item=exception} ${stacktrace} ${event-context:item=stacktrace}"/>
    </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"/>

    <target xsi:type="Database"
      name="DatabaseFile"
      dbProvider=“System.Data.SqlClient”数据库类型
      commandText=“Insert into ErrorLog(ID, Content, CreateTime) Values(@id, @content, @createTime);”插入操作
      connectionString=“data source=.;initial catalog=NLog;user id=sa;password=******;”> 数据库连接字符串 跟我们webcofig中的一样
      <parameter name=“@id” layout=“${guid}” /> 参数
      <parameter name="@content" layout="${message}" />
      <parameter name="@createTime" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff} " />
    </target>

  <rules>   
    <!--
    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" />
    -->
    <logger name="*" minlevel="Info" writeTo="console"/>
    <logger name="*" minlevel="Trace" writeTo="file"/>
   <logger name="*" level="Error"  writeTo="SendMail"></logger>

   <logger name="Database" level="Error" writeTo="DatabaseFile"/>

</rules> </nlog>

四、NLog配置的注意事项

  NLog.config可以单独放,也可以放在WebConfig里。

  1、放在webconfig中示例

  

<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <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="myvar" value="myvalue"/>
    <targets async="false">
      <target xsi:type="File" name="WebDemoFile" fileName="C:\Users\Zachary\Desktop\练习\20170113NLog\Logs\${date:yyyyMMddHHmm}WebDemo.txt" layout="${longdate} ${message}" encoding="UTF-8"/>
    </targets>
    <rules>
      <logger name="WebDemo" level="Error" writeTo="WebDemoFile"/>
    </rules>
  </nlog>
</configuration>

  2、单独放置

  新建一个NLog.config文件

  

<?xml version="1.0" encoding="utf-8" ?>
<!--nlog教程详情:http://www.cnblogs.com/dflying/archive/2006/12/04/581750.html-->

<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="Off" internalLogFile="c:\temp\nlog-internal.log">

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

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

    <!--
    add your targets here
    See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    See https://github.com/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="console" xsi:type="Console"/>
    <target name="file" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log"
      layout="${longdate} ${callsite} ${level}:${message} ${event-context:item=exception} ${stacktrace} ${event-context:item=stacktrace}"/>
  </targets>

  <rules>
    <!-- add your logging rules here -->

    <!--
    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" />
    -->
    <logger name="*" minlevel="Info" writeTo="console"/>
    <logger name="*" minlevel="Trace" writeTo="file"/>
  </rules>
</nlog>

猜你喜欢

转载自www.cnblogs.com/qtiger/p/9951377.html
今日推荐