2017-06-13 63 views
1

我有以下log4net的配置。出於某種原因,「根」記錄器起作用,而「記錄器」記錄器則不起作用。我嘗試切換兩者的內容,另一個將開始工作,而無論在「記錄器」中的哪一個都不會。log4net的根記錄的工作,另外一個不

log4net的調試似乎並沒有被輸出什麼...?檢查控制檯,這是我聽到它應該輸出到的地方。

有什麼建議嗎?

謝謝!

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    <configSections> 
    <section name="log4net" 
     type="log4net.Config.Log4NetConfigurationSectionHandler, 
      log4net"/> 
    </configSections> 
    <log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline"/> 
     </layout> 
    </appender> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="Log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="INFO" /> 
     <levelMax value="FATAL" /> 
     </filter> 
    </appender> 
    <root> 
     <level value="INFO" /> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 
    <logger name="ConsoleLogger"> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </logger> 
    </log4net> 
</configuration> 

我使用的C#代碼是:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)] 

private static readonly ILog Logger = LogManager.GetLogger(typeof(Feeder)); 

Logger.Info("Message to Log"); 
+0

那麼想必你有這樣的代碼'登錄=日誌管理。 GetLogger( 「ConsoleLogger」)'? – stuartd

+0

謝謝stuartd,我添加了代碼到最後。 –

回答

1

你的問題是,你已經創建了一個名爲記錄儀 - ConsoleLogger - 但你是根據你的Feeder類型解析日誌對象名稱。

因爲沒有定義記錄器叫E.G.Namespace.Feeder,log4net的回落至根記錄器,這是你已經看到了發生的事情。

爲了使用ConsoleLogger你的名字問它:

private static readonly ILog Logger = LogManager.GetLogger("ConsoleLogger"); 

(或可選擇地在配置文件重命名)

+0

所以這確實解釋了發生了什麼。你知道有一種方法可以像第二個root一樣,將所有內容寫入文件,一個將所有內容寫入控制檯,但是它們具有不同的日誌記錄級別?我知道如何與他們擁有相同的日誌記錄級別。 Thanks Stuart !! –

+0

原因是因爲我有多個餵食器,每個餵食器都有自己的班級。很高興在某個時刻能夠單獨和輕鬆地登錄各個班級,同時也可以將所有登錄到不同級別的兩個地方。 –

+1

你有我想兩種方法 - 1)定義配置文件中的所有內容或2)在運行時動態設置級別。 – stuartd