用log4.net記錄日誌

以前記錄日誌一般都用自己寫一個日誌記錄模塊,相當的簡單.複雜的程序就用entlib的logging模塊,不過說實在的entlib的日誌模塊個人不是很喜歡,更能也不盡人意.不時會接觸到log4.net,感覺相當的強大,但由於配置非常的複雜,一個項目可能整半天花在個log4上是很失敗的.

做一個簡單的封裝,實現了常用的error日誌和程序記錄.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using log4net;

 

namespace Log
{
    public static class Logger
    {
        private readonly static ILog logger = LogManager.GetLogger( "MyLogger" );
        static Logger()
        {

            //讀取配置信息 
            log4net.Config.DOMConfigurator.Configure( new FileInfo( "log4net.config" ) );
        }

        public static void WriteErrMsg( Exception ex, string strModule, string strFunc )
        {
            logger.Error( strModule + "." + strFunc, ex );
        }

        public static void WriteErrMsg( string Message, string strModule, string strFunc )
        {
            logger.Error( strModule + "." + strFunc + "/r/n" + Message );
        }

        public static void WriteLog( string strMsg )
        {
            logger.Info( strMsg );
        }

        ......................................
    }

}

在oracle 數據庫中創建表:

create table log (
   Datetime timestamp(3),
   Thread varchar2(255),
   Log_Level varchar2(255),
   Logger varchar2(255),
   Message varchar2(4000)
   );
其他數據也創建類似的表

但是下面的config文件中紅色字體的內容在下載的log4net項目中/doc/index.html中的config examples裏面可以找到相應的。

把這個文件log4net.config放到程序的目錄下
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
    <root>
      <!--
            <level value="ALL" />
            <appender-ref ref="rootFile" />
            -->
    </root>
    <logger name="MyLogger">
      <level value="ALL" />
      <appender-ref ref="Loging" />
      <appender-ref ref="ErrorLoging" />

      <appender-ref ref="AdoNetAppender_Oracle">
    </logger>

    <appender name="Loging" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="log.txt" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyyMMdd" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
   <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}%newline%message%n" />
        <param name="Header" value="&#13;&#10;" />
      </layout>
   <filter type="log4net.Filter.LevelRangeFilter">
              <param name="LevelMin" value="INFO" />
              <param name="LevelMax" value="INFO" />
       </filter>
    </appender>

<appender name="ErrorLoging" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="Err.txt" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyyMMdd" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
   <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss}%newline%message%n" />
        <param name="Header" value="&#13;&#10;[Header]&#13;&#10;" />
        <param name="Footer" value="[Footer]&#13;&#10;" />
      </layout>
   <filter type="log4net.Filter.LevelRangeFilter">
              <param name="LevelMin" value="ERROR" />
              <param name="LevelMax" value="ERROR" />
       </filter>
    </appender>

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="data source=[mydatabase];User ID=[user];Password=[password]" />
    <commandText value="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)" />
    <bufferSize value="128" />
    <parameter>
<parameterName value=":log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
<parameterName value=":thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
    </parameter>
    <parameter>
<pParameterName value=":log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
    </parameter>
    <parameter>
<parameterName value=":logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
    </parameter>
    <parameter>
<parameterName value=":message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
    </parameter>
</appender>

</log4net>
</configuration>

現在程序就會記錄下兩個日誌文件,一個是錯誤異常的,一個是程序數據記錄。並將log寫入到數據庫表中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章