2016-02-02 87 views
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被忽略。當我明確地創建一個空構造函數併爲它設置一個斷點時,我發現它甚至沒有實例化。當我將類文件直接複製到我的程序所在的項目中時,它可以正常工作。

我錯過了什麼?

+0

已添加到您的程序集的引用?我敢打賭,如果你啓用log4net自己的診斷,你會發現你的程序集無法找到 –

+0

你是對的,我的程序集沒有找到。它說'無法加載類型[Some.Namespace.SimpleAppender]。試過裝配[log4net,Version = 1.2.15.0,Culture = neutral,PublicKeyToken = deadbabed00faffe]和所有加載的程序集。但是,組件被引用。我如何實現引用程序集之前加載? – rabejens

+0

它不必在* log4net之前加載*。問題是程序集不是由.NET自己發現的。您的程序集必須像任何其他程序集一樣可被發現 - 它應該位於GAC中的同一文件夾中,或者您的配置文件應該包含指向它的'dependentAssembly'element。 *你如何添加參考?程序集是否被部署到應用程序所在的文件夾?您是否忘記了將引用的'Copy Local'屬性設置爲True? –

回答

3

您需要將程序集名稱添加到類型標記。現在它正在尋找Log4Net程序集。

它採用格式

type="Namespace,AssemblyName" 

這麼像

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 

你需要

<appender name="MySimpleAppender" type="Some.Namespace.SimpleAppender,MyAssembly" >