第一點:許可權問題,一定要給要寫入記錄檔的目錄寬鬆的許可權。
本人就是因為許可權問題浪費了很多時間。(因為iis user 的許可權是相對低的,log4net又需要建立檔案,所以許可權一定要給足,後面可以用應用程式集區配置)
本人想用單獨設定檔,所以基本步驟如下:
1:下載net4log,
具體地址就不貼了,給一個官網的配置說明頁:
http://logging.apache.org/log4net/release/manual/configuration.html
2:使用對應版本的dll,
一定要使用對應版本的,我就因為使用的版本不對應,浪費了時間 2.0就是選2.0,4.0就選4.0
3:在項目中引入dll
4:使用單獨的設定檔,這樣做的好處–修改log4net的配置不會影響到整個應用重啟。我的路徑是:
Configure目錄下,log4netConfig.xml檔案
Configure\log4netConfig.xml
具體內容:自己可看相應的說明
<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <!--日誌記錄組建配置--> <log4net> <!-- Console部分log輸出格式的設定 --> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" /> </layout> </appender> <!-- 記錄檔部分log輸出格式的設定 --> <appender name="errorAppender" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="ERROR" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <File value="Logs\\err.log" /> <PreserveLogFileNameExtension value="true" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd" /> <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" /> <File value="Logs\\info.log" /> <PreserveLogFileNameExtension value="true" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd" /> <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"> <levelToMatch value="DEBUG" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <File value="Logs\debug.log" /> <PreserveLogFileNameExtension value="true" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <appender name="perfAppender" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <File value="Logs\perf.log" /> <PreserveLogFileNameExtension value="true" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %logger - %message%newline" /> </layout> </appender> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Logs\Log_" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd'.txt'" /> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <header value="------------------------------------------------------------ " /> <ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout> </appender> <!-- Setup the root category, add the appenders and set the default level --> <root> <level value="ALL" /> <appender-ref ref="errorAppender" /> <appender-ref ref="infoAppender" /> <appender-ref ref="debugAppender" /> </root> <!-- Setup the perfAppender category, add the appenders and set the default level 因為root與logger是父與子的關係,所以不應將:perfAppender在root中顯示,避免重複 --> <logger name="Performance" additivity="false"> <level value="ALL" /> <appender-ref ref="perfAppender" /> </logger> </log4net></configuration>
5:修改AssemblyInfo.cs
用於log4net能夠讀取設定檔。指定設定檔的路徑
//定義log4net設定檔路徑//[assembly: log4net.Config.DOMConfigurator(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]//也可用上面的語句,上面的是老的方式[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = @"Configure\log4netConfig.xml", Watch = true)]
6:建立存放設定檔的目錄,** 並授權可寫很重要
**
7:在代碼中使用:
首先要定義在類體內:
//DataHandler 是類名,用於反射,多查查就知道了,用的時候替換掉;logger也是可以更改的,後面用的時候記住就好。 private static readonly ILog logger = LogManager.GetLogger(typeof(DataHandler));//在想要用的位置就可以使用了。具體的後面的是和設定檔對應的,如括弧內的是要輸出的字串。其中的Debug是記錄層級,以標明該日誌記錄是什麼層級的日誌,再在設定檔中appender內配置相應的層級就可以將內容寫入到相應的檔案中。 logger.Debug("Debug test");
結束,看對應目錄下是否有檔案。
log4net的架構分為四個要素:logger;appender;layout;filter。
logger是負責日誌的記錄者
appender提供記錄的介質
layout負責把記入的內容格式化
filter負責把內容進行篩選
可以說,整個過程就是一個日誌流水線,每個成員負責其中的一個環節
logger發出記錄資訊,appender接到資訊,根據內部的layout配置對記錄資訊格式化,根據filter決定此資訊是否被過濾掉,最後,將其序列化
log4net具體思路:通過設定檔執行個體化對象Logger(產生)->appender(接收)->過濾日誌(filter)->layout序列化輸出 appender的記錄介質