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

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/millen/p/1676007.html
Copyright © 2011-2022 走看看