2012-04-18 85 views
0

我正在嘗試使用重寫的XmlLayoutBase與log4net來打印自定義日誌。它昨天正在工作,但我做了一些重組,現在它正在炸燬。這是我迄今爲止所做的。log4net無法找到自定義XmlLayoutBase

的AssemblyInfo.cs

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

CustomXmlLayout.cs

namespace MyCompany.MyProduct.MyService.Utilities 

public class CustomXmlLayout : XmlLayoutBase 
{ 
    protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent) 
    { 
     //Write stuff 
    } 
} 

log4net.config

<?xml version="1.0"?> 
<log4net> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logfile" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value="yyyyMMdd'.xml'" /> 
    <staticLogFileName value="false" /> 
    <maxSizeRollbackups value="15" /> 
    <layout type="MyCompany.MyProduct.MyService.Utilities.CustomXmlLayout" /> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
</log4net> 

Log.cs

public static class Log 
{ 
    private static ILog log = 
     log4net.LogManager.GetLogger(typeof(Log)); 

    static Log() 
    { 
     XmlConfigurator.Configure(); 
    } 

    private static bool IsEnabled() 
    { 
     //Verify stuff 
    } 

    public static void Write(LogEntry entry) 
    {    
     if (IsEnabled()) 
      log.Debug(entry); 
    } 
} 

無論出於何種原因,致電log.Debug永遠不會在我的自定義類中達到FormatXml。有人有主意嗎?

編輯它工作正常,當我把log4net的配置重新在web.config中,所以我大概猜到了一些與集信息...但我看不出有什麼

+0

你檢查你的輸出窗口,可能發生在幕後的任何錯誤? – DaveDev 2012-04-18 21:14:40

+0

它給我:'log4net:錯誤XmlConfigurator:無法找到應用程序的.config文件中的配置節「log4net」,但在AssemblyInfo我指示它看在log4net.config而不是web.config?我還需要那裏的配置標籤嗎? – FlyingStreudel 2012-04-18 21:18:33

回答

0

在示例中我已經看到這個工作,log4net配置存儲在一個名爲log4net.config(像你一樣),沒有 xml聲明的文件,例如<?xml version="1.0"?> - 試試

0

您應該將configsections添加到您的log4net.config文件中。

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

    </configSections> 

    <log4net> 
     <!-- LOG4NET configuration--> 
    </log4net> 

</configuration> 
0

您正在配置兩次log4net。刪除Log類的靜態構造函數。

+0

配置兩次是否會造成問題? – adt 2012-04-19 08:34:51

+0

不完全,但調用Configure方法會使log4net在web.config中查找,而不是log4net.config – 2012-04-19 08:36:46

0

你沒有指定組裝你的類型:

<layout type="MyCompany.MyProduct.MyService.Utilities.CustomXmlLayout" />

應該是:

<layout type="MyCompany.MyProduct.MyService.Utilities.CustomXmlLayout, assemblyname" />

的AssemblyName是你的輸出DLL。

+0

,這可能是答案。 – adt 2012-04-19 09:04:57

相關問題