0

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に戻すと正常に機能するので、おそらくassemblyinfoを使用していると思います...しかし、何がわかりません

4

5 に答える 5

0

log4net.configファイルにconfigsectionsを追加する必要があります。

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

    </configSections>

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

</configuration>
于 2012-04-19T07:42:32.740 に答える
0

log4net を 2 回構成しています。Log クラスの静的コンストラクターを削除します。

于 2012-04-19T07:45:11.330 に答える
0

タイプのアセンブリを指定していません:

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

次のようにする必要があります。

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

assemblynameは出力 dll です

于 2012-04-19T08:53:27.397 に答える
0

これが機能しているのを見た例では、log4net構成はxml宣言なしlog4net.configで(あなたが持っているように)という名前のファイルに保存されていました-試してみてください<?xml version="1.0"?>

于 2012-04-19T07:37:21.020 に答える
0

私はweb.configの設定セクションを残してしまいました

于 2012-04-24T15:13:58.103 に答える