NLog日志框架使用

介绍

NLog 是一个免费的.NET 日志平台,具有丰富的日志路由和管理功能。它可以轻松地为您的应用程序生成和管理高质量的日志,无论其大小或复杂性如何。

它可以处理从任何 .NET 语言发出的诊断消息,使用上下文信息对其进行扩充,根据您的偏好对其进行格式化,并将它们发送到一个或多个目标,例如文件或数据库。

GitHub

NLog项目地址

引用NLog

通过NuGet管理获取NLog包
注意!!!输出目标为数据库时,新版NLog5 要求安装NLog.DataBase,否则插入数据库会产生报错。
NuGet
在打开页面中搜索NLog并进行安装,安装NLog,新版本无需安装Nlog.Config包

注意!!!输出目标为数据库时,新版NLog5 要求安装NLog.DataBase,否则插入数据库会产生报错。

注意!!!输出目标为数据库时,新版NLog5 要求安装NLog.DataBase,否则会产生报错。

NLog.Config配置讲解

以上操作配置文件不会自动生成,需要自行创建所需文件。

配置文件主体

<?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就是他的一个属性,所以写成xsi:schemaLocation
而默认命名空间不带类似xsi这种,其实xml标签名称有个专业叫法叫做QName,而如果没有前面的xsi:这种一般叫做NCName -->
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
<!-- 表示把定义这个命名空间的schema文件给引用进来,好让开发类型工具能够解析和验证你的xml文件是否符合语法规范 -->
autoReload="true"
<!-- 一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。 -->
throwExceptions="false"
<!-- NLog日志系统抛出异常,throwExceptions="false"表示不会抛出异常,仍会输出到NLog文件中 -->
internalLogLevel="Off“
<!--日志级别  -->
internalLogFile="c:\temp\nlog-internal.log">
<!--  NLog内部日志文件位置  -->
<variable name="myvar" value="myvalue"/><!--定义配置文件中用到的变量 -->
  <targets><!--   定义日志的目标/输出  -->
    <!--输出到文件-->
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
     layout="${longdate} [${level:uppercase=true}]  ${message}" />
    <!--VS输出窗口-->
    <target name="debugger" xsi:type="Debugger" layout="${longdate} [${level:uppercase=true}]  ${message}"/>
    <!--输出到控制台-->
    <target name="console" xsi:type="Console" layout="${longdate} [${level:uppercase=true}]  ${message}"/>
  </targets>
<rules><!--  定义日志的路由规则  -->
    <logger name="*" minlevel="Trace" writeTo="f" />
    <logger name="*"  writeTo="debugger"/>
    <logger name="*"  writeTo="console"/>
  </rules>
</nlog>

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

NLog记录等级

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

NLog等级使用

指定特定等级 如:
level=“Warn”
指定多个等级 如:levels=“Warn,Debug“

以逗号隔开 指定等级范围
如:minlevel=“Warn” maxlevel=“Error”

Logger发邮件参数

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

  <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
  <variable name="basePath" value="C:\Users\Zachary\Desktop\练习\20170113NLog\Logs\"/>

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

Logger写入数据库参数

<?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="../../../Logs/nlog-internal.log">

  <targets>
    <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=你的数据库密码;">
    <parameter name="@id" layout="${guid}" />
    <parameter name="@content" layout="${message}" />
    <parameter name="@createTime" layout="${date:format=yyyy\-MM\-dd HH\:mm\:ss.fff} " />
    </target>
  </targets>
  <rules>
    <logger name="Database" level="Error" writeTo="DatabaseFile"/>
  </rules>
</nlog>

结合到应用配置文件中

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

在configuration配置

然后把NLog.config里面放在后面就行了。

<configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>

Logger使用

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

根据配置的路由名获生成特定的

logger Logger logger = LogManager.GetLogger(“LoggerDemo”);

初始化为当前命名空间下当前类的

logger Logger logger = LogManager.GetCurrentClassLogger();

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

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

logger.Error("这是DatabaseDemo的错误信息");
logger.Error(“ContentDemo {0}:{1},“时间”,DateTime.Now.ToString());需要拼接字符串的话推荐这种,NLog做了延迟处理,用的时候才拼接。
logger.Log(LogLevel.Error, "这是ContentDemo");
 static void Main(string[] args)
        {
            Logger _logger = LogManager.GetCurrentClassLogger();
            _logger.Trace("Trace Message");
            _logger.Debug("DebugMessage");
            _logger.Info("InfoMessage");
            _logger.Error("Error Message");
            _logger.Fatal("FatalMessage");
        }


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值