Log4Net配置還是挺簡單的,具體:
1、新建Web或者Webform項目,使用Nuget下載log4net
2、新建Config文件夾,將log4net配置文件放入此文件夾中(當修改web.config的時候會重啟網站,所以把log4net單獨出來比較好,也好管理),log4net配置:
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="fatalAppender" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="FATAL" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <param name="File" value="Logs\\"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="-1"/> <!--超過1024KB則自動新增文件--> <param name="MaximumFileSize" value="1024KB"/> <param name="RollingStyle" value="Composite"/> <param name="StaticLogFileName" value="false"/> <!--"不能少--> <param name="DatePattern" value=""fatal_"yyyyMMdd".txt""/> <param name="Encoding" value="utf-8"/> <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <appender name="errorAppender" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="ERROR" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <param name="File" value="Logs\\"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="-1"/> <!--超過1024KB則自動新增文件--> <param name="MaximumFileSize" value="1024KB"/> <param name="RollingStyle" value="Composite"/> <param name="StaticLogFileName" value="false"/> <!--"不能少--> <param name="DatePattern" value=""error_"yyyyMMdd".txt""/> <param name="Encoding" value="utf-8"/> <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <appender name="warnAppender" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="WARN" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <param name="File" value="Logs\\"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="-1"/> <!--超過1024KB則自動新增文件--> <param name="MaximumFileSize" value="1024KB"/> <param name="RollingStyle" value="Composite"/> <param name="StaticLogFileName" value="false"/> <!--"不能少--> <param name="DatePattern" value=""warn_"yyyyMMdd".txt""/> <param name="Encoding" value="utf-8"/> <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <appender name="infoAppender" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <param name="File" value="Logs\\"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="-1"/> <!--超過1024KB則自動新增文件--> <param name="MaximumFileSize" value="1024KB"/> <param name="RollingStyle" value="Composite"/> <param name="StaticLogFileName" value="false"/> <!--"不能少--> <param name="DatePattern" value=""info_"yyyyMMdd".txt""/> <param name="Encoding" value="utf-8"/> <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <appender name="debugAppender" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LevelMatchFilter"> <!--只有級別是DEBUG的日志才能輸出--> <levelToMatch value="DEBUG" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <param name="File" value="Logs\\"/> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="-1"/> <!--超過1024KB則自動新增文件--> <param name="MaximumFileSize" value="1024KB"/> <param name="RollingStyle" value="Composite"/> <param name="StaticLogFileName" value="false"/> <!--"不能少--> <param name="DatePattern" value=""debug_"yyyyMMdd".txt""/> <param name="Encoding" value="utf-8"/> <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <root> <level value="ALL" /> <appender-ref ref="fatalAppender" /> <appender-ref ref="errorAppender" /> <appender-ref ref="warnAppender" /> <appender-ref ref="infoAppender" /> <appender-ref ref="debugAppender" /> </root> </log4net>
3、右鍵點擊第2步驟的log4net文件屬性,改成如圖所示
在app.config或者web.config中的configuration節點下加入:
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections>
4、在Properties下的AssemblyInfo.cs文件中加入
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]
我寫了一個log4幫助類方便使用,代碼:
1 public static class Log4Helper 2 { 3 public static void Fatal(Type type, object message, Exception exception = null) 4 { 5 ILog log = LogManager.GetLogger(type); 6 if (exception == null) 7 log.Fatal(message); 8 else 9 log.Fatal(message, exception); 10 } 11 12 public static void Error(Type type, object message, Exception exception = null) 13 { 14 ILog log = LogManager.GetLogger(type); 15 if (exception == null) 16 log.Error(message); 17 else 18 log.Error(message, exception); 19 } 20 21 public static void Warn(Type type, object message, Exception exception = null) 22 { 23 ILog log = LogManager.GetLogger(type); 24 if (exception == null) 25 log.Warn(message); 26 else 27 log.Warn(message, exception); 28 } 29 30 public static void Info(Type type, object message, Exception exception = null) 31 { 32 ILog log = LogManager.GetLogger(type); 33 if (exception == null) 34 log.Info(message); 35 else 36 log.Info(message, exception); 37 } 38 39 public static void Debug(Type type, object message, Exception exception = null) 40 { 41 ILog log = LogManager.GetLogger(type); 42 if (exception == null) 43 log.Debug(message); 44 else 45 log.Debug(message, exception); 46 } 47 }
5、調用:
1 Log4Helper.Fatal(this.GetType(), "Fatal"); 2 Log4Helper.Error(this.GetType(), "Error", new Exception("error")); 3 Log4Helper.Warn(this.GetType(), "Warn"); 4 Log4Helper.Info(this.GetType(), "Info"); 5 Log4Helper.Debug(this.GetType(), "Debug");
在根目錄會有一個Log文件夾,文件夾內容:
最后說下Log4Net跨項目使用:
如果我們將log4net幫助類放在另一個公共的類庫項目中,又需要在另一個引用的項目中使用log4helper類,
這時候僅需要在該項目里的Properties下的AssemblyInfo.cs文件中加入這句:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]