0
我創建了一個非常簡單的appender從子類AppenderSkeleton
。我把它放到一個額外的庫中並引用它。我app.config
節目中的相關部分,我用它是:Log4Net:從引用DLL的自定義appender被忽略
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="${LOCALAPPDATA}\MyProgram\MyLog.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline%exception" />
</layout>
<threshold value="Debug" />
</appender>
<appender name="MySimpleAppender" type="Some.Namespace.SimpleAppender" >
<threshold value="Info" />
</appender>
<root>
<appender-ref ref="FileAppender" />
<appender-ref ref="MySimpleAppender" />
</root>
</log4net>
配置器是安裝在Program.cs
這樣的:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
現在當我登錄的東西,如:
LOG.Info("foo");
郵件被寫入文件(使用FileAppender
),但我的SimpleAppender
被忽略。當我明確地創建一個空構造函數併爲它設置一個斷點時,我發現它甚至沒有實例化。當我將類文件直接複製到我的程序所在的項目中時,它可以正常工作。
我錯過了什麼?
已添加到您的程序集的引用?我敢打賭,如果你啓用log4net自己的診斷,你會發現你的程序集無法找到 –
你是對的,我的程序集沒有找到。它說'無法加載類型[Some.Namespace.SimpleAppender]。試過裝配[log4net,Version = 1.2.15.0,Culture = neutral,PublicKeyToken = deadbabed00faffe]和所有加載的程序集。但是,組件被引用。我如何實現引用程序集之前加載? – rabejens
它不必在* log4net之前加載*。問題是程序集不是由.NET自己發現的。您的程序集必須像任何其他程序集一樣可被發現 - 它應該位於GAC中的同一文件夾中,或者您的配置文件應該包含指向它的'dependentAssembly'element。 *你如何添加參考?程序集是否被部署到應用程序所在的文件夾?您是否忘記了將引用的'Copy Local'屬性設置爲True? –