NLog是一个简单灵活的.NET日志记录类库,且配置方式非常简单。在项目中使用Nlog记录日志,能节省我们大量的时间
一 获取方式
第一种 在VS》工具》NUGET包管理器》程序包管理控制台输入安装nlog命令: Install-Package NLog.Config
第二种 在VS需要添加NLOG的项目上右键》管理NuGet程序包,搜索安装Nlog 和Nlog configuration
第一种和第二种方式本质是一样的都是使用NuGet管理器安装第三方的程序包
第三种 GitHub上NLog的地址https://github.com/NLog/NLog/ Nlog的发布版地址https://github.com/NLog/NLog/releases/ 这种方式,可以下载源码,自己生产Dll文件,添加引用即可,尤其有特殊要求的,可以直接修改源码然后发布
一般项目使用第一种和第二种比较多,方便、简洁
二 配置文件
支持多种配置形式:
1 NLog.config 这个是比较好的一个形式,也比较推荐使用的,网上绝大部分都是用这个形式的,就在程序目录下。
2 可以设置后缀为.nlog的配置文件,这个就保存在程序目录下,如果是web项目里跟web.config同级目录(程序名.exe.nlog / web.nlog)。
3 直接在使用应用程序配置文件或者web的配置文件(app.config / web.config) 不推荐,个人认为影响文件内容的结构,显得比较乱。
三 标签属性介绍
<nlog>属性
autoReload 修改配置文件后是否允许自动加载无须重启程序
throwExceptions 内部日志系统抛出异常
internalLogLevel 可选Trace|Debug|Info|Warn|Error|Fatal决定内部日志的级别 Off 关闭
internalLogFile 把内部的调试和异常信息都写入指定文件里
建议正式发布版throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃。
主要配置targets和rules:
<targets /> - 定义日志的目标/输出,子标签是<target>
<target />属性
name:自定义该target的名字,可供rule规则里使用
type: 定义类型,官方提供的可选类型(不过常用的还是数据库/文件/邮箱/控制台这几种):
Chainsaw|ColoredConsole |Console |Database|Debug|Debugger|EventLog|File|LogReceiverService|Mail|Memory|MethodCall|Network |NLogViewer|Null |OutputDebugString|PerfCounter|Trace|WebService
layouts 用来规定布局样式,语法“${属性}”,可以把上下文信息插入到日志中,内容较多,简要说明几个常用的,要查看全部内容,请查阅参考文档
${all-event-properties}事件日志上下文
${appdomain}当前应用程序域
${assembly-version}应用程序
${basedir}应用程序域的基本目录。
${level}级别。
${longdate}日期和时间的格式分类yyyy-MM-dd HH:mm:ss.ffff。
${machinename}计算机名称
${message}消息
${newline}文字换行
${nlogdir}nlog.dll目录。
${processid}当前进程标识符
${processinfo}运行信息
${processname}当前进程的名称。
${tempdir}临时目录中。
${threadid}当前线程的标识符。
${time}24小时格式HH:MM:ss.mmm。
${windows-identity}Windows线程标识信息(用户名)
<rules /> - 定义日志的路由规则,子标签是<logger>
<logger>属性
name - 记录者的名字
minlevel - 最低级别
maxlevel - 最高级别
level - 单一日志级别
levels - 一系列日志级别,由逗号分隔
writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔
<variable>定义参数,使用方式
<variable name="variable1" value="${basedir}/logs"/>
<targets>
<target name="File" xsi:type="File" fileName="${variable1}/${shortdate}.txt"/>
</targets>
四 调用方法
实例化对象
Logger logger = LogManager.GetCurrentClassLogger();
调用不同的级别输出方式,对象名.级别("信息"):
logger.Debug("Debug Message");
logger.Error("Error Message");
五 常用的日志输出模板
数据库输出
<target xsi:type="Database" name="模板名称"
dbUserName="数据库用户名"
dbPassword="数据库密码"
dbHost="主机"
dbDatabase="数据库名称"
dbProvider="数据库链接程序"
keepConnection="true保持连接false不保持连接"
commandText="数据库操作字符串"
commandType="Text">
<parameter name="数据库操作字符串中的填充对象" layout="${event-context:item=Id}" />
</target>
文件输出
<target xsi:type="File" name="模板名称"
fileName="${basedir}/路径/${shortdate}.log"
layout="内容布局"/>
多文件输出
<target xsi:type="File" name="模板名称"
layout="内容布局"
fileName="${basedir}/路径/logfile.txt"
archiveFileName="${basedir}/路径/log.{######}.txt"
archiveAboveSize="单个文件大小"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false"
encoding="utf-8" />
邮箱输出
<target xsi:type="Mail" name="模板名称"
from="邮箱名"
smtpUserName="发送邮箱名" smtpPassword="邮箱密码"
to="接收邮箱名"
smtpServer="邮箱服务地址" smtpPort="25" smtpAuthentication="Basic"
html="true"
enableSsl="false"
subject="${message}"
header="******************************************"
addNewLines="true"
body="${br} ${longdate} ${br} ${level} ${br} ${callsite} ${br} ${message} ${br} ${exception:format=Message, Type, ShortType, ToString, Method, StackTrace}${br}"
layout="${br} ${longdate} ${br} ${level} ${br} ${callsite} ${br} ${message} ${br} ${exception:format=Message, Type, ShortType, ToString, Method, StackTrace}${br}"
footer="******************************************"/>
官方参考:
https://github.com/nlog/NLog/wiki/Layout%20Renderers
https://github.com/nlog/NLog/wiki/Targets
https://github.com/NLog/NLog/releases/
http://nlog-project.org/