log4net學習筆記

一直想找一個好用的日子類,今天偶然的機會看到了log4net這個類庫,過來學習一下。html

log4net是.NET框架下的一個日子類庫,官網是http://logging.apache.org/log4net/,打開就一股濃濃的Apache 風格撲鼻而來。web

  • 下載地址:

http://apache.fayea.com//logging/log4net/binaries/log4net-1.2.15-bin-newkey.zip數據庫

  • 目錄結構:

├─bin
│  ├─cli
│  │  └─1.0
│  ├─mono
│  │  ├─1.0
│  │  ├─2.0
│  │  ├─3.5
│  │  └─4.0
│  ├─net
│  │  ├─1.0
│  │  ├─1.1
│  │  ├─2.0
│  │  ├─3.5
│  │  ├─4.0
│  │  └─4.5
│  └─net-cp
│      ├─3.5
│      └─4.0
└─docapache

若是是win下的通常使用net文件夾,找到對應的.net版本引用dll便可。緩存

  • 使用方法:主要分爲2部分,配置和調用

配置網絡

按照官方文檔的說明配置能夠經過代碼和配置文件兩種。併發

  • 配置文件:

經過配置文件配置通常是使用系統的配置文件,好比WinForm的app.config,Web的web.config,也能夠自定義xml文件,可是要經過log4net.Config.XmlConfigurator.Configure(…)手動初始化。app

一個簡單的配置文件模板以下:框架

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configsections><section name="log4net" type="System.Configuration.IgnoreSectionHandler">
 <log4net>
   <appender name="X" type="log4net.Appender.X">
      <layout type="log4net.Layout.PatternLayout">
         <conversionpattern value="XX">
      </conversionpattern></layout>
    </appender>
   <root>
      <level value="XXX">
      <appender-ref ref="X">
   </appender-ref></level></root>
</log4net></section></configsections></configuration>
  • Appender來定製各類日誌的存儲介質和模板,支持數據庫、文件和網絡,具體類型有:AdoNet , AnsiColorTerminal , AspNetTrace , BufferingForwarding , ColoredConsole , Console , Debug , EventLog , File , Forwarding , LocalSyslog , ManagedColoredConsole , Memory , NetSend , OutputDebugString , RemoteSyslog , Remoting , RollingFile , Smtp , SmtpPickupDir , Telnet , Trace , Udp。
  • Root節點來定義什麼級別使用什麼Appender,appender-ref的ref就是以前定製的Appender的name。
  • 其中appender. Layout. conversionPattern的value就是用來定義每一條日誌的輸出格式的。支持如下但不只限於宏:(支持首字母縮寫)

%m(message):輸出的日誌消息,如ILog.Debug(…)輸出的一條消息
%n(new line):換行
%d(datetime):輸出當前語句運行的時刻
%r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數
%t(thread id):當前語句所在的線程ID
%p(priority): 日誌的當前優先級別,即DEBUG、INFO、WARN…等
%c(class):當前日誌對象的名稱,例如:
%f(file):輸出語句所在的文件名。
%l(line):輸出語句所在的行號。
%數字:表示該項的最小長度,若是不夠,則用空格填充,如「%-5level」表示level的最小寬度是5個字符,若是實際長度不夠5個字符則以空格填充。函數

  • 來舉幾個例子吧
  • 控制檯輸出日誌

(若是是WinForm,這個庫是不能本身創建控制檯窗體的,能夠經過WinAPI的 [DllImport(「kernel32.dll」)]public static extern Boolean AllocConsole(); 先自行建立控制檯)

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
     <layout type="log4net.Layout.PatternLayout">
       <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
     </conversionpattern></layout>
</appender>
  • 控制檯-按照不一樣級別彩色輸出
    <appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender">
         <mapping>
           <level value="ERROR">
           <forecolor value="White">
           <backcolor value="Red">
         </backcolor></forecolor></level></mapping>
         <layout type="log4net.Layout.PatternLayout">
           <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
         </conversionpattern></layout>
    </appender>
  • 普通文件日誌
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
         <file value="log-file.txt">
         <appendtofile value="true">
         <layout type="log4net.Layout.PatternLayout">
           <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
         </conversionpattern></layout>
    </appendtofile></file></appender>
  • RollingFileAppender日誌(不知道具體怎麼翻譯,就是能夠按照日期分類,按指定文件大小拆分日誌,指定最大拆分數量那種)
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="log\\">
          <appendtofile value="true">
          <datepattern value="yyyy\\MM\\dd'.txt'">
         <staticlogfilename value="false">
          <layout type="log4net.Layout.PatternLayout">
             <conversionpattern value="記錄時間:%date %n線程ID:[%thread] %n日誌級別:  %-5level %n出錯類:%logger property: [%property{NDC}] - %n錯誤描述:%message %n">
          </conversionpattern></layout>
    </staticlogfilename></datepattern></appendtofile></file></appender>
  • 轉發日誌(按照條件將不一樣級別的日誌轉發給不一樣appender)
    <appender name="ForwardingAppender" type="log4net.Appender. ForwardingAppender">
        <threshold value="WARN">
         <appender-ref ref="RollingFileAppender">
    </appender-ref></threshold>
    </appender>
  • 緩存轉發器(不知道效率會不會提升)
    <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
         <buffersize value="100">
         <appender-ref ref="RollingFileAppender">
       </appender-ref></buffersize>
    </appender>
  • 代碼:

經過代碼動態配置主要經過這個函數:

log4net.Config.BasicConfigurator.Configure()

他有5個重載:

public static ICollection Configure();
public static ICollection Configure(IAppender appender);
public static ICollection Configure(params IAppender[] appenders);
public static ICollection Configure(ILoggerRepository repository);
public static ICollection Configure(ILoggerRepository repository, IAppender appender);
public static ICollection Configure(ILoggerRepository repository, params IAppender[] appenders);

appender參數應該和簽名XML配置差很少。

  1. 調用

調用很簡單啦。如今類裏面見一個對象:

private static readonly ILog log = LogManager.GetLogger(typeof(JSShareObj));

其中public static ILog GetLogger(Type type)中的參數type會顯示在前面模板中的%logger中。

而後就能夠調用log的各類方法了:

Log.Debug,Log.Error,Log.Fatal,Log.Info,Log.Warn

相關文章
相關標籤/搜索