就在一切設定好之後發現原本在web app直接使用NLog還能正常輸出紀錄到log檔,將相同的設定檔移到library專案後就不能運作了。嘗試將設定檔中nlog元素的throwExceptions屬性設為true,但沒有看到任何錯誤息出現。最後執行了偵錯模式發現IsDebugEnabled的值居然是false。
但設定檔內容我是原封不動從web app移過來,難道是NLog根本就沒讀取到設定檔(NLog.config)嗎?可是看了一下web app下的bin資料夾,裡面確實有看到NLog.config,所以應該是能讀取到設定檔吧?
研究了一下NLog官方文件可以推斷出設定檔應該是沒有被讀取到,以下是NLog設定檔可被讀取的位置
In case of an ASP.NET application, the following files are searched:
- standard web application file web.config
- web.nlog located in the same directory as web.config
- NLog.config in application’s directory
- NLog.dll.nlog in a directory where NLog.dll is located
- file name pointed by the NLOG_GLOBAL_CONFIG_FILE environment variable (if defined, NLog 1.0 only - support removed in NLog 2.0)
我的web app是一個ASP.NET MVC 4專案。根據上述前三項,NLog會讀取web app目錄下的web.config、web.nlog及NLog.config,所以不會讀取到設定檔。而第4項需要設定檔的名稱為NLog.dll.nlog在bin資料夾(NLog.dll所在位置)內,而不是預設的NLog.config名稱,因此當然也讀不到。第5項就更不用說了,在NLog 2.0已經不支援了。
很明顯地,因為我的設定檔是擺在library專案內,所以解決的方式就是將NLog.config重新命名為NLog.dll.nlog。修改完後,重新編譯我的web app並執行,log檔順利寫入。
雖然重新命名設定檔名稱可以解決問題,不過並不建議這麼做。原因是參考library專案的專案可能不只web app,而web app專案也可能有兩個以上,如果各專案間對NLog.config的設定有所不同的話,很顯然就不適合將設定檔放在library專案中。最後,我在各web app專案下放置所屬的NLog.config,移除library專案中相同的設定檔。
No comments:
Post a Comment