Log4Net 配置日志按日期和日志級別分類寫入


配置效果圖:

 

配置代碼:

  1 <?xml version="1.0" encoding="utf-8" ?>
  2 <log4net>
  3   <!-- Debug 將日志以回滾文件的形式寫到文件中 -->
  4   <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender" >
  5     <!-- 日志文件存放位置,可以為絕對路徑也可以為相對路徑 -->
  6     <file value="App_Data\\" />
  7     <!-- 日志文件的命名規則 -->
  8     <datePattern value="yyyy-MM-dd/'Debug.log'"/>
  9     <!-- 將日志信息追加到已有的日志文件中-->
 10     <appendToFile value="true" />
 11     <rollingStyle value="Size" />
 12     <maxSizeRollBackups value="100" />
 13     <maximumFileSize value="1MB" />
 14     <!-- 指定按日期切分日志文件 -->
 15     <rollingStyle value="Date"/>
 16     <!-- 當將日期作為日志文件的名字時,必須將staticLogFileName的值設置為false -->
 17     <staticLogFileName value="false" />
 18     <!-- 最小鎖定模式,以允許多個進程可以寫入同一個文件 -->
 19     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 20     <layout type="log4net.Layout.PatternLayout">
 21       <conversionPattern value="%newline%newline【日志時間】: %d  【線程ID】: %thread    %newline【日志級別】: %-5p  %newline【日志對象】:%logger  %newline【日志內容】:%m %newline" />
 22     </layout>
 23     <filter type="log4net.Filter.LevelRangeFilter">
 24       <param name="LevelMin" value="Debug" />
 25       <param name="LevelMax" value="Debug" />
 26     </filter>
 27   </appender>
 28 
 29   <!-- Info 將日志以回滾文件的形式寫到文件中 -->
 30   <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender" >
 31     <!-- 日志文件存放位置,可以為絕對路徑也可以為相對路徑 -->
 32     <file value="App_Data\\" />
 33     <!-- 日志文件的命名規則 -->
 34     <datePattern value="yyyy-MM-dd/'Info.log'"/>
 35     <!-- 將日志信息追加到已有的日志文件中-->
 36     <appendToFile value="true" />
 37     <rollingStyle value="Size" />
 38     <maxSizeRollBackups value="100" />
 39     <maximumFileSize value="1MB" />
 40     <!-- 指定按日期切分日志文件 -->
 41     <rollingStyle value="Date"/>
 42     <!-- 當將日期作為日志文件的名字時,必須將staticLogFileName的值設置為false -->
 43     <staticLogFileName value="false" />
 44     <!-- 最小鎖定模式,以允許多個進程可以寫入同一個文件 -->
 45     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 46     <layout type="log4net.Layout.PatternLayout">
 47       <conversionPattern value="%newline%newline【日志時間】:%d  【線程ID】:%thread    %newline【日志級別】:%-5p  %newline【日志對象】:%logger  %newline【日志內容】:%m %newline" />
 48     </layout>
 49     <filter type="log4net.Filter.LevelRangeFilter">
 50       <param name="LevelMin" value="Info" />
 51       <param name="LevelMax" value="Info" />
 52     </filter>
 53   </appender>
 54 
 55   <!-- WARN 將日志以回滾文件的形式寫到文件中 -->
 56   <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender" >
 57     <!-- 日志文件存放位置,可以為絕對路徑也可以為相對路徑 -->
 58     <file value="App_Data\\" />
 59     <!-- 日志文件的命名規則 -->
 60     <datePattern value="yyyy-MM-dd/'Warn.log'"/>
 61     <!-- 將日志信息追加到已有的日志文件中-->
 62     <appendToFile value="true" />
 63     <rollingStyle value="Size" />
 64     <maxSizeRollBackups value="100" />
 65     <maximumFileSize value="1MB" />
 66     <!-- 指定按日期切分日志文件 -->
 67     <rollingStyle value="Date"/>
 68     <!-- 當將日期作為日志文件的名字時,必須將staticLogFileName的值設置為false -->
 69     <staticLogFileName value="false" />
 70     <!-- 最小鎖定模式,以允許多個進程可以寫入同一個文件 -->
 71     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 72     <layout type="log4net.Layout.PatternLayout">
 73       <conversionPattern value="%newline%newline【日志時間】:%d  【線程ID】:%thread    %newline【日志級別】:%-5p  %newline【日志對象】:%logger  %newline【日志內容】:%m %newline" />
 74     </layout>
 75     <filter type="log4net.Filter.LevelRangeFilter">
 76       <param name="LevelMin" value="Warn" />
 77       <param name="LevelMax" value="Warn" />
 78     </filter>
 79   </appender>
 80 
 81   <!-- Error 將日志以回滾文件的形式寫到文件中 -->
 82   <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender" >
 83     <!-- 日志文件存放位置,可以為絕對路徑也可以為相對路徑 -->
 84     <file value="App_Data\\" />
 85     <!-- 日志文件的命名規則 -->
 86     <datePattern value="yyyy-MM-dd/'Error.log'"/>
 87     <!-- 將日志信息追加到已有的日志文件中-->
 88     <appendToFile value="true" />
 89     <rollingStyle value="Size" />
 90     <maxSizeRollBackups value="100" />
 91     <maximumFileSize value="1MB" />
 92     <!-- 指定按日期切分日志文件 -->
 93     <rollingStyle value="Date"/>
 94     <!-- 當將日期作為日志文件的名字時,必須將staticLogFileName的值設置為false -->
 95     <staticLogFileName value="false" />
 96     <!-- 最小鎖定模式,以允許多個進程可以寫入同一個文件 -->
 97     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 98     <layout type="log4net.Layout.PatternLayout">
 99       <conversionPattern value="%newline%newline【日志時間】:%d  【線程ID】:%thread    %newline【日志級別】:%-5p  %newline【日志對象】:%logger  %newline【日志內容】:%m %newline" />
100     </layout>
101     <filter type="log4net.Filter.LevelRangeFilter">
102       <param name="LevelMin" value="Error" />
103       <param name="LevelMax" value="Error" />
104     </filter>
105   </appender>
106 
107   <!-- Fatal 將日志以回滾文件的形式寫到文件中 -->
108   <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender" >
109     <!-- 日志文件存放位置,可以為絕對路徑也可以為相對路徑 -->
110     <file value="App_Data\\" />
111     <!-- 日志文件的命名規則 -->
112     <datePattern value="yyyy-MM-dd/'Fatal.log'"/>
113     <!-- 將日志信息追加到已有的日志文件中-->
114     <appendToFile value="true" />
115     <rollingStyle value="Size" />
116     <maxSizeRollBackups value="100" />
117     <maximumFileSize value="1MB" />
118     <!-- 指定按日期切分日志文件 -->
119     <rollingStyle value="Date"/>
120     <!-- 當將日期作為日志文件的名字時,必須將staticLogFileName的值設置為false -->
121     <staticLogFileName value="false" />
122     <!-- 最小鎖定模式,以允許多個進程可以寫入同一個文件 -->
123     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
124     <layout type="log4net.Layout.PatternLayout">
125       <conversionPattern value="%newline%newline【日志時間】:%d  【線程ID】:%thread    %newline【日志級別】:%-5p  %newline【日志對象】:%logger  %newline【日志內容】:%m%newline" />
126     </layout>
127     <filter type="log4net.Filter.LevelRangeFilter">
128       <param name="LevelMin" value="Fatal" />
129       <param name="LevelMax" value="Fatal" />
130     </filter>
131   </appender>
132 
133   <root>
134     <!--控制級別,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
135     比如定義級別為INFO,則INFO級別向下的級別,比如DEBUG日志將不會被記錄
136     如果沒有定義LEVEL的值,則缺省為DEBUG-->
137     <appender-ref ref="RollingFileDebug" />
138     <appender-ref ref="RollingFileInfo" />
139     <appender-ref ref="RollingFileWarn" />
140     <appender-ref ref="RollingFileError" />
141     <appender-ref ref="RollingFileFatal" />
142     <level value="DEBUG" />
143   </root>
144   <logger name="NHibernate">
145     <level value="WARN" />
146   </logger>
147 </log4net>
log4net.config 配置代碼

 

配置總結:

   log4net主要有Appenders(輸出媒介)、Filters(過濾器)、Layouts(布局)、Loggers(日志類別)、Object Renders(渲染器)組成。

  <root>為根節點

  <logger>主要負責日志的記錄,它記錄的方式有多種,可以是以文件、數據庫、控制台、郵件等多處方式;

繼承<root>,logger輸出日志時,<root>也輸出。示例

    <logger name="loginfo">
         <level value="INFO" />
         <appender-ref ref="InfoAppender" />
    </logger>

  Logger提供了多種方式來記錄一個日志消息,也可以有多個Logger同時存在。每個實例化的Logger對象對被log4net作為命名實體(Named Entity)來維護。log4net使用繼承體系,也就是說假如存在兩個Logger,名字分別為a.b.c和a.b。那么a.b就是a.b.c的祖先。每個Logger都繼承了它祖先的屬性

  <level>為日志等級;由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF;比如定義級別為<level value="INFO"/>,則INFO級別向下的級別,比如DEBUG日志將不會被記錄;如果沒有定義LEVEL的值,則缺省為DEBUG

  <appender>為輸出媒介,常用有AdoNetAppender(輸出到數據庫),AspNetTraceAppender(輸出到ASP.NET日志),ConsoleAppender(輸出到console),BufferingForwardingAppender(按信息條數輸出到console),ColoredConsoleAppender/ManagedColoredConsoleAppender(根據設定顏色輸出到console),EventLogAppender(輸出到操作系統應用程序日志),FileAppender(輸出到文件),RollingFileAppender(有回收的輸出到文件),SmtpAppender(輸出到郵件),RemotingAppender(遠程輸出)

   <filter>過濾器,用來過濾輸出源輸出的內容,其中包括:

  ·DenyAllFilter 阻止所有的日志事件被記錄

  ·LevelMatchFilter 只有指定等級的日志事件才被記錄

  ·LevelRangeFilter 日志等級在指定范圍內的事件才被記錄

·  LoggerMatchFilter Logger名稱匹配,才記錄

  ·PropertyFilter 消息匹配指定的屬性值時才被記錄

·  StringMathFilter 消息匹配指定的字符串才被記錄

示例:

  <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
          <filter type="log4net.Filter.LevelMatchFilter">
              <levelToMatch value="INFO" />
          </filter>
          <filter type="log4net.Filter.DenyAllFilter" />

   </appender>

log4net layout ConversionPattern常用符號說明

     %m,%message:輸出的日志消息;

     %M,%method:輸出調用日志輸出的方法名;

     %n,%newline:輸出一個回車換行符;

     %d,%date:輸出當前語句運行的時刻,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出2015-03-10 14:53:28;也可以%d{ISO8601}輸出2015-03-10 14:51:12,220, %d{DATE}輸出‘10 Mar 2015 14:51:51,318’, %d{ABSOLUTE}輸出14:54:07,943,%d{HH:mm:ss,fff}, %d{dd MM yyyy HH:mm:ss,fff},yyyy年份,MM月份,dd日期,HH小時小時24制,hh小時12小時制,mm分鍾,ss秒,fff毫秒(f為秒的精確位數,幾個f代表精確到小數點后幾位)

     %r(runtime),%timestamp:輸出程序從運行到執行到當前語句時消耗的毫秒數;

     %t,%thread:當前語句所在的線程ID ;

     %p(priority),%level: 輸出日志的當前日志級別,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG;

     %C(class),%class,%type:輸出當前日志對象的名稱,%C{1}輸出日志調用最后第一個類;

     %c(category), %logger:輸出日志信息所屬目錄類型logger name

     %L,%line:輸出語句所在的行號;

     %l,%location:輸出%F%L%C%M

     %F,%file: 輸出語句所在的文件名;

     %a,%appdomain:輸出引發日志事件的應用程序域的友好名稱

     %x,%ndc : 輸出(nested diagnostic context)ndc上下文內容

     %X,%mdc:輸出(mapped diagnostic context)mdc上下文內容

     %P,%property: 輸出事件的特殊屬性。例如: %property{user} 輸出user屬性

     %[-|.]數字: %10,表示最小長度為10,如果不夠,則用空格左側填充;%-10,表示最小長度為10,如果不夠,則用空格右側填充;%.10,表示最大長度為10;可以與%m等其他格式組合使用,示例%10m,%-10m,%10.10m,%-10.10m

     %%:輸出%

解決占用問題

  最小鎖定模式,以允許多個進程可以寫入同一個文件 例:

   <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

 

官方地址:http://logging.apache.org/log4net/

配置示例:http://logging.apache.org/log4net/release/config-examples.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM