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的執行日誌了。(相當給力)


參見:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章