nlog 中小型日志组件 解决了应用程序的日志问题

来源:互联网 发布:云计算招聘岗位 编辑:程序博客网 时间:2024/06/14 23:36

曾经一项目需要进行程序的日志记录(我是做.net 开发的),看了一些方法,如果是自己来写,形成一定结构,开发量又大,便想用已经第三方控件了,发现了log4net 很强大,但是配置复杂,并且很多功能也是浪费,但想小一点的,找到了nlog 控件,这很好,结构清楚,而功能正好所用,可以满足.net 大部分程序的 log 问题

 

 

下面来看看比较合适的用法,

1、项目中引用 nlog.dll

 

 

2、把他的配置文件 nlog.dll.nlog 引入了 到项目中了,(注意)如果是放在源代码目录,则要选复制到输出目录了,如果是只接放在输出目录就不用了

 

 

3、编辑日志文件了,

nlog.dll.nlog 其实是一个xml  例子如下

 

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >

<targets>
    <target name="console" xsi:type="ColoredConsole"
           layout="${date:format=HH/:mm/:ss}|${level}|${stacktrace}|${message}"/>
 
    <target name="info" xsi:type="File" fileName="${basedir}/logs/info.log"
            layout="[${date:format=yyyy-MM-dd HH/:mm/:ss}][${level}] ${message} ${exception}"/>

    <target name="exception" xsi:type="File" fileName="${basedir}/logs/exception.log"
            layout="[${date:format=yyyy-MM-dd HH/:mm/:ss}][${level}] ${message} ${exception}"/>
  </targets>
  <rules>
    <logger name="*" level="Error"  writeTo="exception"></logger>
    <logger name="*" level="Info"  writeTo="info"></logger>
  </rules>
</nlog>

 

 

他这个分成 rule 和target

 

rule 就是说日志是那一级的,他也有两种,有上面这样的指定每一级 level 还有一种是指定 minlevel 也就是日志级别大于这一级就用这个的target ,也是就后面 writeto 指定的就是target 的位置

 

target 就是输入日志的实例了, filename 就是指定当前输出日志的全路径,"${basedir}/logs/info.log"  像这样就是写到程序目录下logs 文件夹下的info.log 中了,

 

4、调用 可以申明一个static 方法,直接调用就行了,

public static Logger m_log=LogManager.GetCurrentClassLogger();

 

m_log.Debug("i am in debug",new Exception ("debug"));

 

 

这样就行了,logger 有很多种的 debug、 error、 warming、 info 这像等等,

 

后来发现像得到如果你发的exception 不能得到是那一行代码发生错误,只记录得很简单,所以用了 extension method(.net 3.0以上才能用)  封装一个logutil 类,只接调用就好,更能记录下那句代码调试时出现异常,有要做这个的朋友可以看下,代码也简单, 

代码如下了,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NLog;
namespace PUG.Common.Util
{
    public class LogUtil
    {
        public static Logger m_log=LogManager.GetCurrentClassLogger();
        //Info log
        public static void Info(string info)
        {
            LogUtil.m_log.Info(info);
        }
        public static void InfoException(Exception ex)
        {
            LogUtil.m_log.InfoException(ex);
        }
        //Debug log
        public static void Degug(string debug)
        {
            LogUtil.m_log.Debug(debug);
        }
        public static void DebugException(Exception ex)
        {
            LogUtil.m_log.DebugException(ex);
        }
        //Error log
        public static void Error(string error)
        {
            LogUtil.m_log.Error(error);
        }
        public static void ErrorException(Exception ex)
        {
            LogUtil.m_log.Error(ex);
        }
        //Fatal log
        public static void Fatal(string fatal)
        {
            LogUtil.m_log.Fatal(fatal);
        }
        public static void FatalException(Exception ex)
        {
            LogUtil.m_log.FatalException(ex);
        }
        ////Log log
        //public static void Log(string log)
        //{
        //    LogUtil.m_log.Log(log);
        //}
        //public static void LogException(Exception ex)
        //{
        //    LogUtil.m_log.LogException(ex);
        //}
        //Warn Log
        public static void Warn(string warn)
        {
            LogUtil.m_log.Warn(warn);
        }
        public static void WarnException(Exception ex)
        {
            LogUtil.m_log.WarnException(ex);
        }
    }
    /// <summary>
    /// extension nlog.dll
    /// </summary>
    public static class NLogExtension
    {
        //info extension
        public static void InfoException(this Logger log, Exception ex)
        {
            log.InfoException(ex.StackTrace, ex);
        }
        //debug extension
        public static void DebugException(this Logger log, Exception ex)
        {
            log.DebugException(ex.StackTrace,ex);  
        }
        //error extension
        public static void ErrorException(this Logger log,Exception ex)
        {
            log.ErrorException(ex.StackTrace,ex);
        }
        //fatal extension
        public static void FatalException(this Logger log,Exception ex)
        {
            log.FatalException(ex.StackTrace ,ex);
           
        }
        ////log extension
        //public static void LogException(this Logger log, Exception ex)
        //{
        //    log.LogException(ex.StackTrace,ex);
        //}
        //warn extension
        public static void WarnException(this Logger log, Exception ex)
        {
           
            log.WarnException(ex.StackTrace,ex);
        }
    }
}