log4net找不到自定义的XmlLayoutBase

时间:2012-04-18 21:05:24

标签: c# web-services log4net

我正在尝试使用重写的XmlLayoutBase和log4net来打印自定义日志。它昨天工作,但我做了一些重组,现在它正在爆炸。这是我到目前为止所做的。

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时,它运行正常,所以我猜它可能与assemblyinfo有关......但是我看不出是什么

5 个答案:

答案 0 :(得分:0)

在我看到这个工作的示例中,log4net配置存储在名为log4net.config的文件中(如您所有),没有 xml声明,例如<?xml version="1.0"?> - 尝试一下

答案 1 :(得分:0)

您应该将配置添加到log4net.config文件中。

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

    </configSections>

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

</configuration>

答案 2 :(得分:0)

您正在配置log4net两次。删除Log类的静态构造函数。

答案 3 :(得分:0)

您没有为您的类型指定程序集:

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

应该是:

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

程序集名称是您的输出dll。

答案 4 :(得分:0)

我最终将配置部分保留在web.config