2016-05-13 46 views
0

我正在使用C#編寫一個內部應用程序,我們一直試圖找出解決這個問題幾天。我們使用Log4Net v1.2.15.0編譯.Net v4.5.2。我有兩個滾動文件appender,EventsLogger和SitrepLogger,它們都被設置爲寫入網絡。我已經證實,這確實按預期工作,但是當我打電話給一個appender(無關緊要)寫出時,它會寫入EventsLogger和SitrepLogger文件。這是從我的app.configC#Log4Net寫入這兩個Appenders

 <log4net> 
    <appender name="EventsLogger" type="log4net.Appender.RollingFileAppender"> 
     <file name="File" value="\\TS-WXLF41\Project\Ambushed\${USERNAME}\EventsLog" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="1MB" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <param name="StaticLogFileName" value="false"/> 
     <param name="RollingStyle" value="Date"/> 
     <param name="DatePattern" value="_MM-dd-yy.\tx\t" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%newline%date{HH:mm:ss tt} %message" /> 
     </layout> 
    </appender> 

    <appender name="SitrepLogger" type="log4net.Appender.RollingFileAppender"> 
     <file name="File" value="\\TS-WXLF41\Project\Ambushed\${USERNAME}\logs\sitrep" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="1MB" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <param name="StaticLogFileName" value="false"/> 
     <param name="RollingStyle" value="Date"/> 
     <param name="DatePattern" value="_MM-dd-yy.\tx\t"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%newline%date{HH:mm:ss tt} %message" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="EventsLogger" /> 
     <appender-ref ref="SitrepLogger" /> 
    </root> 
    </log4net> 

在我的程序的入口點構造器的相關數據我叫log4net.Config.XmlConfigurator.Configure();我很確定按預期工作。除此之外,我不會在代碼中的其他任何地方調用配置。在我的入口點類的成員中,我呼叫private static readonly log4net.ILog logger = log4net.LogManager.GetLogger("SitrepLogger");來獲取我的程序(入口點)類所需的記錄器。在我的其他課程中,我使用EventsLogger,因此我在這些類的成員中調用private static readonly log4net.ILog eventslogger = log4net.LogManager.GetLogger("EventsLogger");。我不會每次給GetLogger打電話一次,我確信我通過調用eventslogger.Info()

來調用正確的appender,這對我們來說工作正常(使用多個appender來寫入不同的文件),但是我們做了很多很多從那時起,我們試圖恢復到沒有成功的變化。編譯時沒有錯誤,沒有警告,也沒有消息。預先感謝您的一切! :)

回答

1

你是混淆appenders和伐木工。您的應用程序正在創建記錄器「SitrepLogger」和「EventsLogger」。這些都會繼承根記錄器的配置,然後寫入使用相同名稱「SitrepLogger」和「EventsLogger」的appender。

試試下面的配置,我認爲會給你想要的東西:

<log4net> 
<appender name="EventsAppender" ... > 
    ... 
</appender> 
<appender name="SitrepAppender" ... > 
    ... 
</appender> 

<root> 
    <level value="ALL" /> 
</root> 
<logger name="EventsLogger" additivity="False"> 
    <appender-ref ref="EventsAppender" /> 
</logger> 
<logger name="SitrepLogger" additivity="False"> 
    <appender-ref ref="SitrepAppender" /> 
</logger> 
</log4net> 
+0

謝謝你,喬!這對我們有效!我非常感謝你的幫助。我也將深入研究Apache的Log4Net文檔以獲得更好的理解。 我收到了一些關於我的app.config的警告。 「警告元素'root'包含不完整的內容。期望可能的元素列表:'appender-ref'。」 和 「警告元素'log4net'具有無效的子元素'記錄器'。」 –