C#第三方日志库Nlog

本文介绍了C#中如何使用第三方日志库Nlog,包括配置Nlog.config文件,设置Logger标签对控制输出范围和级别,以及Target标签对定义输出格式和目的地。在Silverlight项目中使用Nlog的注意事项也进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 官网》

http://nlog.codeplex.com/

[3]《Sentinel官网》

http://sentinel.codeplex.com/

 [4]《使用NLog为Silverlight增加日志记录功能》

http://www.wpf123.com/news/?6124.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值