C#第三方库Nlog
Kagula
2012-03-31
内容简介
本文记录C#的NLog库(日志库)的常用方式。所有代码在WinXPSP3+VS2010SP1环境中测试通过。
使用的第三方库是Sentinel 0.9.2.0,NLog-v2.0.0.2000。
如果是在Silverlight项目中使用NLog请参考资料[4]。
正文
第一次使用
在参考资料[2]中找到download下载Nlog安装包,在系统中安装。
新建C#的Win32Console项目,鼠标右键单击项目名称,添加新项目[Visual C# Items]->[CSharp]->[Empty Nlog configuration file],缺省名称为“Nlog.config”的文件。你可以在项目中使用快捷键[Ctrl]+[Shift]+[A]添加“Nlog.config”文件,同时Nlog.DLL文件也会被加入到项目中去。
下面在Program.cs中填入缺省代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NLog;
namespace testNLog
{
class Program
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public static void MyMethod1()
{
int k = 42;
int l = 100;
logger.Trace("Sample trace message, k={0}, l={1}", k, l);
logger.Debug("Sample debug message, k={0}, l={1}", k, l);
logger.Info("Sample informational message, k={0}, l={1}", k, l);
logger.Warn("Sample warning message, k={0}, l={1}", k, l);
logger.Error("Sample error message, k={0}, l={1}", k, l);
logger.Fatal("Sample fatal error message, k={0}, l={1}", k, l);
logger.Log(LogLevel.Info, "Sample fatal error message, k={0}, l={1}", k, l);
}
static void Main(string[] args)
{
logger.Info("---------------------------------------");
logger.Trace("Sample trace message");
logger.Debug("Sample debug message");
logger.Info("Sample informational message");
logger.Warn("Sample warning message");
logger.Error("Sample error message");
logger.Fatal("Sample fatal error message");
// alternatively you can call the Log() method
// and pass log level as the parameter.
logger.Log(LogLevel.Info, "Sample fatal error message");
MyMethod1();
}
}
}
下面在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">
<!-- make sure to set 'Copy To Output Directory' option for this file -->
<!-- go to http://nlog-project.org/wiki/Configuration_file for more information -->
<targets>
<target name="asyncFile" xsi:type="AsyncWrapper">
<target name="logfile" xsi:type="File" fileName="file.txt" />
</target>
<target name="console" xsi:type="ColoredConsole"
layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${message} ${exception}"/>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
<logger name="*" minlevel="Trace" writeTo="console" />
</rules>
</nlog>
上面这个例子演示了,日志信息如何输出到控制台和文件中。文件中的Target标签对有个嵌套,最外层是个“AsyncWrapper”类型的Target标签对,使信息以异步方式输出到日志文件。
添加的NLog.config文件必须放在项目对应的DEBUG目录或RELEASE目录中,即必须放在和可执行文件相同的路径中。
Logger标签对,控制输出范围与水平
name属性:
指定哪些代码段要输出信息,例如:“<logger name="SomeNamespace.Component.*" …”,只输出SomeNamespace.Component域里面打印的信息。
minLevel属性:
指定输出等级,Logging 水平分为以下等级“Trace<<Debug<<Info<<Warn<<Error<<Fatal ”,如果我们选择Info值,则Trace和Debug等级的信息不会被输出。
writeTo属性:
指定使用那个“Target标签对”来输出信息
Final属性:
这个属性若设置为true,则被当前Logger标签对输出的消息类型,不再被下一个Logger标签对处理。例如:
<rules>
<logger name="SomeNamespace.Component.*"minlevel="Trace" writeTo="logfile" final="true"/>
<logger name="*" minlevel="Info"writeTo="logfile2" />
</rules>
Target标签对,输出格式,输出到哪里
Name属性:
target标签对的名称
Type属性:
target的类型,比如target=”File”。还有“Database”,“Mail”,“Network”等类型。
Silverlight使用文件输出,需将项目设置为Out of browser模式
fileName属性:
若target类型为File,则可以指定输出文件名。
例:
fileName=”file.txt”,
fileName="${basedir}/App_Data/log.txt",
fileName="${basedir}/log.txt",
fileName ="${specialfolder:MyDocuments}/log.${shortdate}.txt"
fileName="${logger}.txt"
fileName="${shortdate}.txt"
fileName="${windows-identity:domain=false}.txt
fileName="${shortdate}/${windows-identity:domain=false}.txt"
如果是Silverlight项目可能不能指定输出文件到App_Data目录下。
Layout属性:
格式化输出日志信息。例:
layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}"
layout="[${date:format=yyyy-MM-ddHH\:mm\:ss}][${level}] ${message} ${exception}"
layout="${longdate}${callsite} ${level} ${message}"
address属性:
指定日志信息输出到哪个网络服务器,例:
<targetname="n1" xsi:type="Network"address="tcp://localhost:4001"/>
发送调试信息到网络服务器
参考资料[3]可以实现。但是需要注意以下问题:
[1]建议下载这个软件的zip版本,解压后里面有Sentinel.exe文件,可以用下面的命令行启动Sentinel,免得每次启动,都要输入一遍配置信息。
“sentinel nlog udp 9999”
[2]如果改成TCP(参考资料[3]用的是UDP)方式,则sentinel收不到日志信息,不知是什么原因。
参考资料
[1]《Nlog Tutorial》
http://nlog-project.org/wiki/Tutorial
[2]《Nlog 官网》
[3]《Sentinel官网》
[4]《使用NLog为Silverlight增加日志记录功能》
http://www.wpf123.com/news/?6124.html