前些日子刚好作了一个和硬件有数据交互的项目,牵涉到多家公司合作的项目本人一直觉得不是很爽,经常会出现数据无故丢失或者是传输的数据不准确,公司A指责公司B传过来的数据有问题,反之公司B很喜欢狡辩说公司A的程序员水平差不懂接收,更恐怖的是公司C(垄断性企业CMCC)更NX了,询问接口问题一个礼拜才给回复,不爽的时候干脆丢下一句话。哥哥的接口就是这样子的,不用的话你别人的也休想用。听到这样子的话我不能自称哥哥了,只能是当小弟的了。所以为了证明哥哥我的清白,记录日志这个环节特别重要。吵架拿得出证据,自己底气也足了。Nlog 可以将日志以各种方式记录。本人推荐是用txt 记录就好了。说道这里。很多人觉得 日志嘛!发生错误了就记录。这是一个很大的误区。日志的可以记录的太多了,我们的项目就是把一整个流程的各个细节里面发生的数据变化全部记录下来。这样子我们通过日志就可以看到我们的程序流程是否发生了问题,如果流程没有问题我们还可以看数据是否有问题。
所以得感谢一下Nlog 这个DLL。让我多次沉冤得雪。
有关Nlog 的详细 可以关注官网 http://nlog-project.org/
接下来我们谈谈 如何使用 NLog
配置WebConfig 当然不用WebConfig也可以用添加一个Nlog.Config文件
在
<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">
</nlog>
这里要介绍一下 一些节点。 <Nlog>根节点不用介绍我也不知道怎么介绍,targets这个非常重要,targets就是目标的意思了。意思是你要把哪些数据 存放在那些地方。
xsi:type 就是你要存放的类型了,很多种,通常是直接写Txt就可以了或者写入数据库可以。具体的方式可以参考官方网站的源码。对了Nlog 是开源的呢!还有遇到日志比较多的话。可以按照自己想要的方式生成日志,随意定制多少时间生成一个文件。或者是每个用户一天生成一个文件。反正是灵活多变。
<variable name="logDirectory" value="${basedir}/logs/${shortdate}"/>
<variable>可以想象成一个变量了。
<targets>
<target name="Utility" xsi:type="File" fileName="${logDirectory}/Utility.txt"
layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}"/>
这个就是写成txt。LayOut是现实要呈现的日志。 fileName就是存放的地址了。
<target name="database" xsi:type="Database" dbProvider="mssql" connectionString="Data Source=sdc-dev-iis01;Initial Catalog=SHA_EPMStaging;Persist Security Info=True;User ID=shubi;Password=system" commandText="insert into applog(time_stamp,loglevel,logger,message,callsite,stacktrace,createuser) values(@time_stamp, @loglevel, @logger, @message,@callsite,@stacktrace,@createuser)">
<parameter name="@time_stamp" layout="${date}"/>
<parameter name="@loglevel" layout="${level}"/>
<parameter name="@logger" layout="${logger}"/>
<parameter name="@message" layout="${message}"/>
<parameter name="@callsite" layout="${callsite:filename=true}"/>
<parameter name="@stacktrace" layout="${stacktrace}"/>
<parameter name="@createuser" layout="${windows-identity:domain=true}"/>
</target>
上面这个Targets就是将日志存放入数据库。
<rules>
<logger name="*" minlevel="Trace" writeTo="database" />
<logger name="EPM.Utility.*" minlevel="Trace" writeTo="Utility" />
</rules>
<rules>规则这个东西当然也是超级重要了。 Name 就是类了,记录是发生在哪个类下面的数据,*就是所有了。 minlevel是最低界别 当然 说道Level有很多中了 Info,Error,Debug,Trace,Fatal,Waring。 还有一个Levels的属性很重要 。我们通过设计这个可以控制那些日志可以不记录了。我们不需要去删除程序里面的代码。只要控制 WebConfig就可以了。正所谓收放自如了。