想要讓Log4net日志(以下稱日志)按每月自動歸類為一個文件夾,為此,學習和修改了log4net.config文件。查了資料,重點是以下這些參數:
<param name="File" value="Log/log.config" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="_yyyy-MM-dd.'config'" />
<param name="StaticLogFileName" value="true" />
眾說紛紜,許多說得讓人看后似懂非懂,經過說起來都是淚的實驗,終於有了明確的結論,整理發表出來避免后人走彎路。
1.StaticLogFileName的值如果為true,則當前日志文件(相對於歷史日志文件而言)的文件名只取File參數。如果為false,則文件名取File+DatePattern。
2.File的值是靜態的如果寫“yyyy-MM”就是“yyyy-MM”而不會轉成當前的年份和月份,而且斜扛“/”與反斜扛“\”效果相同,連續2扛也與1扛相同。
3.DatePattern的值是動態的“yyyy”代表4位年份,詳細參考網上的眾多資料(這個不難得到)。如果想表達靜態的字符(如“y”)有2種辦法,1是使用轉義字符“\”,即“\y”,2是使用一對單引號限定,即“'y'”。如上面的value="_yyyy-MM-dd.'config'",就是因為fig有特殊含義,所以把“config”用單引號包含起來了。
4.修改了(網站上的)log4net.config文件,使它生效的方法是重啟網站(我沒有試着去操作應用程序池)。實測重啟網站有約10%沒有使它生效,但如果是先停止網站再啟動,則100%生效。
以上4點最關鍵是第1點,也是眾多資料所沒有說清楚的(本人的漢字理解能力有問題?)。最終符合我要求的配置如下:
<param name="File" value="Log\" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM\\yyyy-MM-dd.'log'" />
<param name="StaticLogFileName" value="false" />
以上是基於我自己做的實驗而得出的結論,難免不夠系統和全面,限於本人水平,難免有錯誤。如有發現錯漏,歡迎指正。