NLog文章系列——入门教程(下)
2010-05-12 13:38
204 查看
作者:JarosławKowalski<jaak@jkowalski.net>
翻译:DflyingChen:http://dflying.cnblogs.com/
原文:http://www.nlog-project.org/tutorial.html
本文为《NLog文章系列》的第四篇,即入门教程的最后一篇。将继续描述演示用NLog书写日志的方法。
自动重新配置
NLog的配置文件将在程序启动之后自动加载。对于某些将长时间运行的进程(例如Windows服务或ASP.NET应用程)来说,往往需要在程序运行当中临时性地提高记录等级,而这时我们却并不希望重新启动该应用程序。NLog可以自动跟踪其配置文件的变化,一旦配置文件被修改,NLog将立即自动重新加载。我们可以通过在配置文件中设置<nlogautoReload="true"/>来实现该需求。这种自动重新配置功能也会应用到被包含的文件上,也就是说若包含文件发生了变化,NLog同样将自动重新加载整个的配置文件。
日志功能排错
虽然已经配置好了NLog,可是有些时候应用程序仍旧会出现一些难以理解的问题,例如没有任何日志输出。其中最常见的原因就是ASP.NET的权限——ASP.NET的aspnet_wp.exe或w3wp.exe可能没有对NLog配置文件中指定目录的写入权限。NLog对于其自身运行中发生的异常有着很强的监测能力。如下设定可以将这些监测结果输出至指定位置,或是对这些异常进行相应的处理(默认设定将忽略自身异常):
<nlogthrowExceptions="true"/>-当NLog自身掷出异常时,该选项可以将异常掷回日志的调用者。在开发过程中,这个设定将变得非常有用,能够迅速帮助我们定位异常的位置以及原因。而当程序开发结束并部署到应用环境时,应该尽快设定throwExceptions为false,免得NLog自身的异常导致整个应用程序的崩溃。
<nloginternalLogFile="file.txt"/>-让NLog将自身运行过程中的日志信息(包括可能出现的异常)写入到文件中。
<nloginternalLogLevel="Trace|Debug|Info|Warn|Error|Fatal"/>-选择写入内部日志的记录等级。该等级设定的越高,相应的输出日志文件将越小。
<nloginternalLogToConsole="false|true"/>-将内部日志信息发送至控制台。
<nloginternalLogToConsoleError="false|true"/>-将内部日志信息发送至标准异常输出(stderr)。
异步处理、包装器(Warpper)以及复合输出目标
NLog的包装器和复合输出目标特性让我们能够修改输出目标的默认行为,这种修改体现在如下几个方面:
异步处理(向目标输出将用单独的线程处理)
异常时自动重试
负载平衡
缓存
过滤
备用输出目标(主输出目标失败时启用备用输出目标)
其他,请参考http://www.nlog-project.org/targets.html
只要在配置文件中将若干个target节点嵌套起来,即可完成对包装器或复合输出目标的定义。嵌套深度没有任何限制。例如为某个输出目标添加异步处理以及异常自动重试功能,只要按照如下代码配置NLog即可:
异步处理特性极为常用,因此NLog提供了一种简写方式——即<targetsasync="true"/>,这样该输出目标将自动应用AsyncWrapper包装器。
以编程方式进行配置
某些情况下我们可能不愿用配置文件来配置NLog,而是选择使用NLog的配置API进行。对这些API的详细介绍已经超过了本文的范围,所以我们这里仅仅简单介绍一些。若希望以编程的方式对NLog进行配置,我们需要:
创建一个LoggingConfiguration对象,用来保存配置信息
至少创建一个输出目标对象
设置该输出目标对象的属性
设置LoggingRule对象,并将其添加到LoggingConfiguration对象的LoggingRules集合中
启用该LoggingConfiguration对象(将LogManager.Configuration设定为该LoggingConfiguration对象即可)
下面的代码片段以编程方式创建了两个输出目标对象——支持颜色的控制台和文件,并将记录等级等于或高于Debug的日志信息发送至这两个输出目标:
NLog还能干点儿啥?
NLogsupportssomemoreloggingscenarios,whichcouldn'tbefullydescribedhere.Seethelinksbelowformoreinformation:
除此之外,NLog还支持一些更加复杂的需要日志记录的场景。限于篇幅,这里无法一一列出,若你对其感兴趣,可以参考如下链接:
异常日志记录-http://sourceforge.net/mailarchive/forum.php?thread_id=6766833&forum_id=41984
条件表达式语言-http://www.nlog-project.org/conditions.html
NLogViewer-实时的日志记录查看器(当前还在pre-alpha阶段)-http://viewer.nlog-project.org/
Lastupdated:2006-07-1011:32:55
译注and后记
CrazyCoder朋友将加入到NLog文档的翻译过程中,他目前已经完成了对NLog配置文件这一节的翻译,不日即将发布。我非常感谢CrazyCoder的无私奉献精神!
由于某些原因,这一段时间我又会忙起来了…………可能不会如这一个月一样这样频繁地更新这个Blog,当然对于留言,我仍会尽量及时答复的。十分感谢朋友们一贯的支持!
虽然很不情愿,但是很有可能这个《NLog文章系列》也没办法继续写下去了……我真的非常希望有热心的朋友可以参与进来,既可以帮助开源社区的发展,也可以学习到新的知识,与朋友们进行交流,更能够顺便提高自己的英文能力。
如果你愿意奉献出自己的一点点时间,参与《NLog文章系列》的翻译,烦请你和我联系。参与翻译之后,如果你有能力且愿意的话,我也十分愿意尽自己微薄之力,帮你和出版社联系并翻译出版真正的图书。
翻译:DflyingChen:
原文:
本文为《
自动重新配置
NLog的配置文件将在程序启动之后自动加载。对于某些将长时间运行的进程(例如Windows服务或ASP.NET应用程)来说,往往需要在程序运行当中临时性地提高记录等级,而这时我们却并不希望重新启动该应用程序。NLog可以自动跟踪其配置文件的变化,一旦配置文件被修改,NLog将立即自动重新加载。我们可以通过在配置文件中设置<nlogautoReload="true"/>来实现该需求。这种自动重新配置功能也会应用到被包含的文件上,也就是说若包含文件发生了变化,NLog同样将自动重新加载整个的配置文件。
日志功能排错
虽然已经配置好了NLog,可是有些时候应用程序仍旧会出现一些难以理解的问题,例如没有任何日志输出。其中最常见的原因就是ASP.NET的权限——ASP.NET的aspnet_wp.exe或w3wp.exe可能没有对NLog配置文件中指定目录的写入权限。NLog对于其自身运行中发生的异常有着很强的监测能力。如下设定可以将这些监测结果输出至指定位置,或是对这些异常进行相应的处理(默认设定将忽略自身异常):
<nlogthrowExceptions="true"/>-当NLog自身掷出异常时,该选项可以将异常掷回日志的调用者。在开发过程中,这个设定将变得非常有用,能够迅速帮助我们定位异常的位置以及原因。而当程序开发结束并部署到应用环境时,应该尽快设定throwExceptions为false,免得NLog自身的异常导致整个应用程序的崩溃。
<nloginternalLogFile="file.txt"/>-让NLog将自身运行过程中的日志信息(包括可能出现的异常)写入到文件中。
<nloginternalLogLevel="Trace|Debug|Info|Warn|Error|Fatal"/>-选择写入内部日志的记录等级。该等级设定的越高,相应的输出日志文件将越小。
<nloginternalLogToConsole="false|true"/>-将内部日志信息发送至控制台。
<nloginternalLogToConsoleError="false|true"/>-将内部日志信息发送至标准异常输出(stderr)。
异步处理、包装器(Warpper)以及复合输出目标
NLog的包装器和复合输出目标特性让我们能够修改输出目标的默认行为,这种修改体现在如下几个方面:
异步处理(向目标输出将用单独的线程处理)
异常时自动重试
负载平衡
缓存
过滤
备用输出目标(主输出目标失败时启用备用输出目标)
其他,请参考
只要在配置文件中将若干个target节点嵌套起来,即可完成对包装器或复合输出目标的定义。嵌套深度没有任何限制。例如为某个输出目标添加异步处理以及异常自动重试功能,只要按照如下代码配置NLog即可:
<targets>
<targetname="n"xsi:type="AsyncWrapper">
<targetxsi:type="RetryingWrapper">
<targetxsi:type="File"fileName="${file}.txt"/>
</target>
</target>
</targets>
异步处理特性极为常用,因此NLog提供了一种简写方式——即<targetsasync="true"/>,这样该输出目标将自动应用AsyncWrapper包装器。
以编程方式进行配置
某些情况下我们可能不愿用配置文件来配置NLog,而是选择使用NLog的配置API进行。对这些API的详细介绍已经超过了本文的范围,所以我们这里仅仅简单介绍一些。若希望以编程的方式对NLog进行配置,我们需要:
创建一个LoggingConfiguration对象,用来保存配置信息
至少创建一个输出目标对象
设置该输出目标对象的属性
设置LoggingRule对象,并将其添加到LoggingConfiguration对象的LoggingRules集合中
启用该LoggingConfiguration对象(将LogManager.Configuration设定为该LoggingConfiguration对象即可)
下面的代码片段以编程方式创建了两个输出目标对象——支持颜色的控制台和文件,并将记录等级等于或高于Debug的日志信息发送至这两个输出目标:
usingNLog;
usingNLog.Targets;
usingNLog.Config;
usingNLog.Win32.Targets;
classExample
{
staticvoidMain(string[]args)
{
//Step1.Createconfigurationobject
LoggingConfigurationconfig=newLoggingConfiguration();
//Step2.Createtargetsandaddthemtotheconfiguration
ColoredConsoleTargetconsoleTarget=newColoredConsoleTarget();
config.AddTarget("console",consoleTarget);
FileTargetfileTarget=newFileTarget();
config.AddTarget("file",fileTarget);
//Step3.Settargetproperties
consoleTarget.Layout="${date:format=HH//:MM//:ss}${logger}${message}";
fileTarget.FileName="${basedir}/file.txt";
fileTarget.Layout="${message}";
//Step4.Definerules
LoggingRulerule1=newLoggingRule("*",LogLevel.Debug,consoleTarget);
config.LoggingRules.Add(rule1);
LoggingRulerule2=newLoggingRule("*",LogLevel.Debug,fileTarget);
config.LoggingRules.Add(rule2);
//Step5.Activatetheconfiguration
LogManager.Configuration=config;
//Exampleusage
Loggerlogger=LogManager.GetLogger("Example");
logger.Trace("tracelogmessage");
logger.Debug("debuglogmessage");
logger.Info("infologmessage");
logger.Warn("warnlogmessage");
logger.Error("errorlogmessage");
logger.Fatal("fatallogmessage");
}
}
NLog还能干点儿啥?
NLogsupportssomemoreloggingscenarios,whichcouldn'tbefullydescribedhere.Seethelinksbelowformoreinformation:
除此之外,NLog还支持一些更加复杂的需要日志记录的场景。限于篇幅,这里无法一一列出,若你对其感兴趣,可以参考如下链接:
异常日志记录-
条件表达式语言-
NLogViewer-实时的日志记录查看器(当前还在pre-alpha阶段)-
Lastupdated:2006-07-1011:32:55
译注and后记
由于某些原因,这一段时间我又会忙起来了…………可能不会如这一个月一样这样频繁地更新这个Blog,当然对于留言,我仍会尽量及时答复的。十分感谢朋友们一贯的支持!
虽然很不情愿,但是很有可能这个《
如果你愿意奉献出自己的一点点时间,参与《
相关文章推荐
- NLog文章系列——入门教程(上)
- NLog文章系列——入门教程(中)
- NLog文章系列——入门教程(上)
- NLog文章系列——入门教程(下)
- NLog文章系列——入门教程(中)
- NLog文章系列——入门教程(转)
- J2ME Mobile 3D入门教程系列文章之二
- 系列文章 -- OpenCV入门教程
- 系列文章--oracle简单入门教程
- 系列文章 -- OpenCV入门教程
- 收集的RxJava 2.x入门教程系列专栏,文章链接
- SharePoint 2013 入门教程--系列文章
- 系列文章--SharePoint 2013 Designer 入门教程
- J2ME Mobile 3D入门教程系列文章之一
- SharePoint 2013 入门教程--系列文章
- 系列文章--ASP.NET之AJAX入门教程
- Laravel大型项目系列教程(五)之文章和标签管理
- Stage3d 由浅到深理解AGAL的管线vertex shader和fragment shader || 简易教程 学习心得 AGAL 非常非常好的入门文章
- Quartz 入门系列教程-00-序章
- SeaJS入门教程系列之SeaJS介绍(一)