zoukankan      html  css  js  c++  java
  • Log4Net笔记(一)基础(转)

    最近在好好整理些小组件的使用,本文就Log4Net的使用做一个简单的说明。

    准备工作

    首先下载log4net相关资源:http://logging.apache.org/log4net/download.html

    本文中还使用了NUnit。

    log4net的组成

    log4net主要由Logger、Appender、Repository、Layout

    1)Logger

    Logger是log4net主要部分,是来产生日志消息。在log4net中提供了LogManager类来产生ILog:

    1.LogManager.GetLogger(LogName)

    在ILog提供了:Erro、Info、Debug、Warn四个重载方法来记录日志。

    2)Appender

    Appender是用来产生日志生成的目的地。Log4Net可以将消息生成到多个目的地,可以轻松通过配置多种Appender组件来实现,当必要的时候我们也可以通过扩张Appender来实现我们需要的截至方式。

    3)Repository

    Respository用户维护日志对象的结构。除非我们需要扩展log4net时,一般时候是不会用到Respository组件。

    4)Layout

    Layout是格式化消息输出形式的组件。Layout提供给我们了灵活而又简单消息格式化方式。

    log4net消息的级别

    级别 对应方法
    OFF  
    Fatal void Fatal(…)
    Error void Error(…)
    Warn void Warn(…)
    Info void Info(…)
    Debug void Debug(…)
    All  

    消息的级别按照上面的表格由上到下,由高到底的顺序,即OFF>Fatal>Error>Warn>Info>Debug>All。我们可以通过这样的消息的级别进行消息在Appender时进行行AppenderFiter。

    配置

    log4net的配置可以通过放在新的文件中或者放在程序的配置文件中。而log4net会通过AppDomain.CurrentDomain.BaseDirectory目录下的查找配置文件。<log4net>是log4net查找的标识。先来看我们应用程序的一个配置:

    001.<?xml version="1.0" encoding="utf-8" ?>
    002.<log4net>
    003.    <appender name="LogAllToFile" type="log4net.Appender.FileAppender">
    004.        <file value="G:\学习资料\Log4Net\Log4NetDemo\Log4NetDemo\bin\Debug\DemoLog.log"/>
    005.        <appendToFile value="true"/>
    006.        <!--<layout type="log4net.Layout.PatternLayout">
    007.            <conversionPattern value="%d [%t] %-5l - %m%n%n"/>
    008.        </layout>-->
    009.        <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">
    010.            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" />
    011.        </layout>
    012.    </appender>
    013.    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    014.        <param name="File" value="log/system_log_"/>
    015.        <param name="AppendToFile" value="true"/>
    016.        <param name="MaxSizeRollBackups" value="100"/>
    017.        <param name="MaximumFileSize" value="1KB"/>
    018.        <param name="StaticLogFileName" value="false"/>
    019.        <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    020.        <param name="RollingStyle" value="Date"/>
    021.        <!--<layout type="log4net.Layout.PatternLayout">
    022.            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    023.        </layout>-->
    024.        <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">
    025.            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" />
    026.        </layout>
    027.    </appender>
    028.    <appender name="ConsoleAppender"
    029.              type="log4net.Appender.ConsoleAppender" >
    030.        <layout type="log4net.Layout.PatternLayout">
    031.            <param name="ConversionPattern"
    032.               value="%d [%t] %-5p %c [%x] - %m%n"/>
    033.        </layout>
    034.    </appender>
    035.  
    036.  
    037.    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
    038.        <!--BufferSize为缓冲区大小-->
    039.        <param name="BufferSize" value="1" />
    040.        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    041.        <connectionString value="database=HJRightPlat;server=(local);User ID=sa;Password=123456;" />
    042.        <commandText value="INSERT INTO Sys_Log ([Date],[Thread],[Log_Level],[Logger],[Message],[Exception],[User],[Category],[URL],[Client_IP]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@User,@Category,@URL,@ClientIp)" />
    043.        <parameter>
    044.            <parameterName value="@log_date" />
    045.            <dbType value="DateTime" />
    046.            <layout type="log4net.Layout.RawTimeStampLayout" />
    047.        </parameter>
    048.        <parameter>
    049.            <parameterName value="@thread" />
    050.            <dbType value="String" />
    051.            <size value="255" />
    052.            <layout type="log4net.Layout.PatternLayout">
    053.                <conversionPattern value="%thread" />
    054.            </layout>
    055.        </parameter>
    056.        <parameter>
    057.            <parameterName value="@log_level" />
    058.            <dbType value="String" />
    059.            <size value="50" />
    060.            <layout type="log4net.Layout.PatternLayout">
    061.                <conversionPattern value="%level" />
    062.            </layout>
    063.        </parameter>
    064.        <parameter>
    065.            <parameterName value="@logger" />
    066.            <dbType value="String" />
    067.            <size value="255" />
    068.            <layout type="log4net.Layout.PatternLayout">
    069.                <conversionPattern value="%logger" />
    070.            </layout>
    071.        </parameter>
    072.        <parameter>
    073.            <parameterName value="@message" />
    074.            <dbType value="String" />
    075.            <size value="4000" />
    076.            <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">
    077.                <conversionPattern value="%SysMessage" />
    078.            </layout>
    079.        </parameter>
    080.        <parameter>
    081.            <parameterName value="@exception" />
    082.            <dbType value="String" />
    083.            <size value="2000" />
    084.            <layout type="log4net.Layout.ExceptionLayout" />
    085.        </parameter>
    086.        <parameter>
    087.            <parameterName value="@User" />
    088.            <dbType value="String" />
    089.            <size value="50" />
    090.            <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">
    091.                <conversionPattern value="%UserName" />
    092.            </layout>
    093.        </parameter>
    094.        <parameter>
    095.            <parameterName value="@Category" />
    096.            <dbType value="String" />
    097.            <size value="50" />
    098.            <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">
    099.                <conversionPattern value="%Category" />
    100.            </layout>
    101.        </parameter>
    102.        <parameter>
    103.            <parameterName value="@URL" />
    104.            <dbType value="String" />
    105.            <size value="50" />
    106.            <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">
    107.                <conversionPattern value="%SysURL" />
    108.            </layout>
    109.        </parameter>
    110.        <parameter>
    111.            <parameterName value="@ClientIp" />
    112.            <dbType value="String" />
    113.            <size value="50" />
    114.            <layout type="HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils">
    115.                <conversionPattern value="%ClientIP" />
    116.            </layout>
    117.        </parameter>
    118.    </appender>
    119.  
    120.  
    121.  
    122.    <root>
    123.        <priority value="ALL"/>
    124.        <!-- ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF-->
    125.        <appender-ref ref="LogAllToFile"/>
    126.        <appender-ref ref="ConsoleAppender"/>
    127.        <appender-ref ref="RollingLogFileAppender"/>
    128.        <appender-ref ref="ADONetAppender"/>
    129.    </root>
    130.</log4net>

    在上面的配置中我们使用了ADONetAppender、LogAllToFile、ConsoleAppender、RollingLogFileAppender四种appender,其中ADONetAppderder中我们使用了些扩展,在后面会详细进行说明。下面说说各个配置节点:

    1)Root:在Root中我们可以来指定消息级别,在上面种我们指定为“ALL”,同时我们也可以指定Appender的引用对象。

    2)Appender:我们通过Appender配置节点来指定对应的各种方式的Appender,Appender节点可以是多种的。

    应用

    首先来看我们定义了一个系统消息的实体:

    01.public class SysLogMessage
    02.{
    03.    /// <summary>
    04.    /// 用户名
    05.    /// </summary>
    06.    public string UserName
    07.    {
    08.        get;
    09.        set;
    10.    }
    11.    /// <summary>
    12.    /// 分类
    13.    /// </summary>
    14.    public string Category
    15.    {
    16.        get;
    17.        set;
    18.    }
    19.    /// <summary>
    20.    /// 访问的Web地址
    21.    /// </summary>
    22.    public string URL
    23.    {
    24.        get;
    25.        set;
    26.    }
    27.    /// <summary>
    28.    /// 客户端IP
    29.    /// </summary>
    30.    public string Client_IP
    31.    {
    32.        get;
    33.        set;
    34.    }
    35.    /// <summary>
    36.    /// 消息记录
    37.    /// </summary>
    38.    public string Message
    39.    {
    40.        get;
    41.        set;
    42.    }
    43.}

    用单件模式定义了一个消息的管理类:

    01.public class SysLogManager
    02.{
    03.    #region Thread-safe, lazy Singleton
    04.    SysLogManager() { this.InitLogManager(); }
    05.    public static SysLogManager Instance {
    06.        get {
    07.            return Nested.LogManager;
    08.        }
    09.    }
    10.    private class Nested {
    11.        static Nested() { }
    12.        internal static readonly SysLogManager LogManager = new SysLogManager();
    13.    }
    14.    private void InitLogManager()
    15.    {
    16.        XmlConfigurator.Configure(BaseDataCache.log4netConfig);
    17.        _Log = LogManager.GetLogger(LogName);
    18.          
    19.    }
    20.    #endregion
    21.    #region Help Methods And Fileds
    22.    ILog _Log;
    23.    string LogName = "HJRightLog";
    24.    #endregion
    25.    public void Erro(SysLogMessage msg)
    26.    {
    27.        _Log.Error(msg);
    28.    }
    29.    public void Erro(SysLogMessage msg, Exception e)
    30.    {
    31.        _Log.Error(msg, e);
    32.    }
    33.    public void Info(SysLogMessage msg)
    34.    {
    35.        _Log.Info(msg);
    36.    }
    37.    public void Info(SysLogMessage msg, Exception e)
    38.    {
    39.        _Log.Info(msg, e);
    40.    }
    41.    public void Debug(SysLogMessage msg)
    42.    {
    43.        _Log.Debug(msg);
    44.    }
    45.    public void Debug(SysLogMessage msg, Exception e)
    46.    {
    47.        _Log.Debug(msg, e);
    48.    }
    49.    public void Warn(SysLogMessage msg)
    50.    {
    51.        _Log.Warn(msg);
    52.    }
    53.    public void Warn(SysLogMessage msg, Exception e)
    54.    {
    55.        _Log.Warn(msg, e);
    56.    }
    57.}

    看看测试代码:

    01.[Test]
    02.public void TestLogErro()
    03.{
    04.    _logM.Erro(new SysLogMessage{
    05.        Message="测试",
    06.        UserName="Henllyee",
    07.        Category="Debug",
    08.        URL="http://henllyee.cnblogs.com"
    09.    });
    10.      
    11.}

    结果:

    ConsleAppender:

    image

    RollingLogFileAppender:

    image

    AdoNetAppender:

    image

    总结

    本文中概括地介绍了下log4net的使用,在下篇的文章中将会详细说明下多个常用的Appender。

    转自:http://www.cnblogs.com/Henllyee/archive/2010/01/24/1655206.html

  • 相关阅读:
    SQL 多列合并一列
    jQuery Ajax post多个值传参
    jquery获取select选中的值
    js 事件对象
    有关cookie
    事件冒泡和事件捕获
    js事件监听
    阻止浏览器的默认行为
    鼠标拖拽效果
    自定义右键菜单
  • 原文地址:https://www.cnblogs.com/millen/p/1676007.html
Copyright © 2011-2022 走看看