一 引入背景程序員
在軟件開發週期中,不管是開發中,或是測試中,或是上線後,選擇合適的工具監控程序的運行狀態相當重要,只有如此,才能更好地排查程序問題和檢測程序性能問題等。本篇文章主要與你們分享,如何利用Log4net在項目中記錄日誌文件。在應用程序出現問題時,啓用日誌記錄有助於解決問題。使用log4net,能夠在運行時啓用日誌記錄,而無需修改應用程序二進制文件。log4net是幫助程序員輸出日誌語句到各類輸出目標的工具。數據庫
log4net支持以下框架:apache
二 log4net概述windows
(一)日誌級別app
1.級別概括框架
2.級別比較ide
(1)級別從低=>高排序:ALL<Debug<Info<Warn<Error<Fatal<OFF工具
(2)日誌不能記錄低於最低級別的記錄,如設置最低級別爲Info,則低於Info的級別,都不能記錄佈局
code性能
測試結果
3.利用Filter過濾級別
除此以外,還能利用filter級別過濾,來設置將不一樣級別記錄到相應文件,如將INFO級別信息記錄到INFO文件中,將Error級別信息記錄到Error文件中。
配置文件
後臺代碼
static void Main(string[] args) { //Log4net幾種提錯類型 //建立日誌記錄組件 ILog iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); try { iLog.Debug("Debug", new Exception("Debug")); iLog.Info("Info", new Exception("Info")); iLog.Warn("Warn", new Exception("Warn")); iLog.Error("Error", new Exception("Error")); iLog.Fatal("Fatal", new Exception("Fatal")); } catch (Exception ex) { throw new Exception(ex.Message); } }
測試結果
(二)級別繼承
級別繼承很簡單,歸結爲一句話:若本事設置了級別,則用本身的級別,若沒設置級別,則繼承離本身最近的級別。
例子1
例子2
例子3
例子4
(三)日誌輸出形式
1.輸出文件形式概括
2.項目中經常使用的輸出形式
3.代碼操做
3.1.在Root中定義日誌輸出媒介
<root> <level value="ALL" /> <!--定義日誌的輸出媒介,以下定義四種方式--> <!--文件形式記錄日誌--> <appender-ref ref="LogFileInfoAppender" /> <!--<appender-ref ref="LogFileErrorAppender" />--> <!--控制檯顯示日誌--> <appender-ref ref="ConsoleAppender" /> <!--Windows事件日誌--> <appender-ref ref="EventLogAppender" /> <!--數據庫日誌--> <appender-ref ref="AdoNetAppender_Oracle" /> </root>
3.2.配置具體的媒介,以下以文件形式爲例
<!--定義輸出到文件中--> <appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender"> <!--定義文件存放位置--> <file value="E:/Log/log4netInfoLog.txt" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HH:mm:ss" /> <!---定義佈局模板--> <layout type="log4net.Layout.PatternLayout"> <!--每條日誌末尾的文字說明--> <footer value="by Alan_beijing" /> <!--輸出格式--> <!--樣例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優先級:%priority;%newline 日誌級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" /> </layout> </appender>
3.3.後臺代碼
class Program { static void Main(string[] args) { //Log4net幾種提錯類型 //建立日誌記錄組件 ILog iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); try { iLog.Debug("Debug", new Exception("Debug")); iLog.Info("Info", new Exception("Info")); iLog.Warn("Warn", new Exception("Warn")); iLog.Error("Error", new Exception("Error")); iLog.Fatal("Fatal", new Exception("Fatal")); } catch (Exception ex) { throw new Exception(ex.Message); } } }
3.4.測試結果
(四)定義日誌輸出格式
1.經常使用輸出格式概括
2.code及測試結果
三 代碼實例
本示例是基於VS2017控制條程序寫的。
1.後臺
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using log4net; using System.Reflection; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace Log4netDemo { class Program { static void Main(string[] args) { //Log4net幾種提錯類型 //建立日誌記錄組件 ILog iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); try { iLog.Debug("Debug", new Exception("Debug")); iLog.Info("Info", new Exception("Info")); iLog.Warn("Warn", new Exception("Warn")); iLog.Error("Error", new Exception("Error")); iLog.Fatal("Fatal", new Exception("Fatal")); } catch (Exception ex) { throw new Exception(ex.Message); } } } }
2.配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--聲明自定義節點--> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSettings> <log4net> <root> <!--<level value="Info" />--> <level value="ALL" /> <!--定義日誌的輸出媒介,以下定義四種方式--> <!--文件形式記錄日誌--> <!--<appender-ref ref="LogFile_MinLevel_Info" />--> <appender-ref ref="LogFileInfoAppender" /> <appender-ref ref="LogFileErrorAppender" /> <!--控制檯顯示日誌--> <!--<appender-ref ref="ConsoleAppender" />--> <!--Windows事件日誌--> <!--<appender-ref ref="EventLogAppender" />--> <!--數據庫日誌--> <!--<appender-ref ref="AdoNetAppender_Oracle" />--> </root> <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低)--> <logger name="log4netLevel"> <!--<level value="ALL" /> <level value="DEBUG" />--> <!--<level value="INFO" />--> <!--<level value="WARN" /> <level value="ERROR" />--> <!--<level value="FATAL" /> <level value="OFF" />--> </logger> <!--定義輸出到文件中--> <!--<appender name="LogFile_MinLevel_Info" type="log4net.Appender.FileAppender">--> <appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender"> <!--定義文件存放位置--> <file value="E:/Log/log4netLogFile_Info.txt" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HH:mm:ss" /> <!---定義佈局模板--> <layout type="log4net.Layout.PatternLayout"> <!--每條日誌末尾的文字說明--> <footer value="by Alan_beijing" /> <!--輸出格式--> <!--樣例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優先級:%priority;%newline 日誌級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="Info" /> <param name="LevelMax" value="Info" /> </filter> </appender> <appender name="LogFileErrorAppender" type="log4net.Appender.FileAppender"> <!--定義文件存放位置--> <file value="E:/Log/llog4netLogFile_Error.txt" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HH:mm:ss" /> <!--最大文件大小--> <maximumFileSize value="10MB" /> <staticLogFileName value="false"/> <!---定義佈局模板--> <layout type="log4net.Layout.PatternLayout"> <!--每條日誌末尾的文字說明--> <footer value="by Alan_beijing" /> <!--輸出格式--> <!--樣例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info--> <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優先級:%priority;%newline 日誌級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="Error" /> <param name="LevelMax" value="Error" /> </filter> </appender> <!--定義輸出到控制檯命令行中--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定義輸出到windows事件中--> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <!--定義輸出到數據庫中,這裏舉例輸出到Access數據庫中,數據庫爲C盤的log4net.mdb--> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" /> <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" /> <!--定義各個參數--> <parameter> <parameterName value="@logDate" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date" /> </layout> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@logLevel" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="240" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> </appender> </log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> </configuration>
四 推薦連接
【01】http://logging.apache.org/log4net/
五 服務區
有喜歡的朋友,能夠看一下,不喜歡的的朋友,勿噴,謝謝!!