NLog简介
NLog是一个简单灵活的.NET日志记录类库,NLog的API非常类似于log4net,配置方式非常简单。支持多种形式输出日志:文本文件、系统日志、数据库、控制台、邮箱等
1.NLog简介
在nuget控制台输入安装nlog命令: Install-Package NLog.Config
Nlog配置的方式常用的有两种
1.直接在使用应用程序配置文件或者web的配置文件(app.config / web.config)
2.NLog.config 这个是比较好的一个形式(推荐)
配置文件中的主要标签是:targets和rules:
<targets /> - 定义日志的目标/输出,下级是<target>
<rules /> - 定义日志的路由规则,下级是<logger>
2.标签介绍
<nlog>标签
autoReload 修改配置文件后是否允许自动加载无须重启程序
throwExceptions 内部日志系统抛出异常(建议throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。)
internalLogLevel 可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭
internalLogFile 把内部的调试和异常信息都写入指定文件里
<targets>标签
<target />定义了日志的输出,可以设置文件名称和格式,输出方式。
name 自定义该target的名字,可供rule规则里使用
type 定义类型,官方提供了很多可选类型,常用的还是 File \Database \Colored Console\ Mail
layouts 用来规定布局样式,语法“${属性}”,可以把上下文信息插入到日志中,官方提供的可以用的属性见文末附录
<rules>标签
<logger/>定义日志的记录规则,记录范围
name 记录者的名字
minlevel 最低级别
maxlevel 最高级别
level 单一日志级别
levels 一系列日志级别,由逗号分隔。
<variable>标签
变量定义 <!-- 定义变量var1--> <variable name="var1" value="${basedir}/logs"/> <targets> <!-- 使用变量var1--> <target name="File" xsi:type="File" fileName="${var1}/${shortdate}.txt"/> </targets>
3.一个简单的栗子
把日志记录到彩色控制台,log文本文件和mysql数据库。首先添加Nlog.config文件如下,放在控制台项目的bin/debug目录下
<?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" autoReload="true"> <targets> <!--控制台彩色打印--> <target name="console" xsi:type="ColoredConsole" useDefaultRowHighlightingRules="false" layout="${longdate}|${pad:padding=5:inner=${level:uppercase=true}}|${message}" > <highlight-row condition="level == LogLevel.Debug" foregroundColor="DarkGray" /> <highlight-row condition="level == LogLevel.Info" foregroundColor="Gray" /> <highlight-row condition="level == LogLevel.Warn" foregroundColor="Yellow" /> <highlight-row condition="level == LogLevel.Error" foregroundColor="Red" /> <highlight-row condition="level == LogLevel.Fatal" foregroundColor="Red" backgroundColor="White" /> </target> <!--写入log文本文件--> <target name="file" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard"> <target xsi:type="File" fileName="${basedir}/logs/nlog/AT___${shortdate}.log" layout="----------------日志记录开始----------------${newline}【日志时间】:${longdate} ${newline}【日志级别】:${level:uppercase=true}${newline}【异常相关信息】${newline}${message}${newline}${newline}${newline}" /> </target> <!--写入mysql数据库--> <target name="db" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard"> <target type="Database" dbProvider="MySql.Data.MySqlClient" connectionString="server=10.0.10.66;port=3306;database=logedemo;uid=root;pwd=123321;SslMode=none"> <commandText> INSERT INTO tbLog(Timestamp,Level,Message,StackTrace) VALUES(@time_stamp, @level, @message, @stacktrace); </commandText> <!--database connection parameters--> <parameter name="@time_stamp" layout="${date}" /> <parameter name="@level" layout="${level:uppercase=true}" /> <parameter name="@message" layout="${message}" /> <parameter name="@stacktrace" layout="${stacktrace}" /> </target> </target> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="console" /> <logger name="*" minlevel="Info" writeTo="db" /> <logger name="*" minlevel="Debug" writeTo="file" /> </rules> </nlog>