Common.Logger和NLog使用,出現Common.Logging.Simple.NoOpLogger或IsInfoEnabled=false
這兩天在使用Common.Logger和NLog時。碰到了以前沒有見到的問題。
在VS2012,我用Nutget安裝了
Common.Logging
Common.Logger.NLog20
NLog
NLog Configuration
日誌對象的初始化爲:ILog logger = LogManager.GetLogger(Assembly.GetExecutingAssembly().GetName().Name);
程序執行時,發現並沒有日誌輸出,在調試下用Add Watch去查看一個ILog日誌對象,發現如下:(最初顯示時,這裏的IsDebugEnabled其實爲false)
經過排查,發現是我在App.config裏少了一個配置項,使得Common Logger找不到NLog。添加以下的配置項之後可以正常運行:
<common>
<logging>
<factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20">
<arg key="configType" value="FILE" />
<arg key="configFile" value="~/NLog.config" />
</factoryAdapter>
</logging>
</common>
同時,在App.config這個文件中,還存在另一個必須的配置,在節點<configSections></configSections>(沒有的話新建一個)添加:
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" requirePermission="false" />
</sectionGroup>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
注意:
<configSections></configSections>應該是<configuration></configuration>的第一個節點,新建時要小心。
也有可能是另外的原因,就是NLog執行出錯了。對此,我們可以配置查看NLog的執行過程:
在nlog.config文件裏,在nlog頭添加:
這樣就可以查看NLog的執行日誌了。(相當給力)
參見:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.