3

すべてのログファイルが使用するように構成されたlog4netファイルアペンダーがあります。

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="..\Logs\"/>
    <appendToFile value="true"/>
    <datePattern type="log4net.Util.PatternString" value="yyyyMMdd'.Log'"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date][%-5level][%logger] %message%newline"/>
    </layout>
</appender>

ディレクトリと日付のパターンはハードコーディングされています。まったく同じ構成を使用する必要があるロガーが異なりますが、フォルダー名が異なります。

今のところ、各ブロックをコピーして新しいアペンダーに貼り付けることになりましたが、共通のアペンダーの設定を「共有」するようにlog4netを構成する方法はありますか?

4

2 に答える 2

0

これは、log4netをプログラムで構成しない限り不可能です。

于 2012-07-14T11:05:18.437 に答える
0

構成の少なくとも一部は、プログラムで実行する必要があります。

Configure() の前にこれを呼び出します。

    log4net.GlobalContext.Properties["SysLogFileName"] = syslogFileName;

これを使用して更新します。

    public static void ChangeSyslogFile(string syslogFileName)
    {
        var hier = log4net.LogManager.GetRepository() as Hierarchy;
        if (hier == null)
        {
            Console.WriteLine("Unable to change Syslog filename, null hierarchy");
            return;
        }
        var sysLogAppender =
            (RollingFileAppender) hier.GetAppenders().
                                      First(appender => appender.Name.Equals("SimulatedSysLogFile", 
                                          StringComparison.InvariantCultureIgnoreCase));

        if (null == sysLogAppender)
        {
            Console.WriteLine("Unable to change Syslog filename, appender not found");
            return;
        }
        sysLogAppender.File = syslogFileName;
        sysLogAppender.ActivateOptions(); 
    }

これは私の設定です:

  <appender name="SimulatedSysLogFile" type="log4net.Appender.RollingFileAppender">                 
    <file type="log4net.Util.PatternString" value="%property{SysLogFileName}" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <maximumFileSize value="10MB" />
    <maxSizeRollBackups value="10" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{M/dd/yyyy h:mm:ss tt} %message %newline" />
    </layout>
</appender>
于 2012-07-17T18:02:28.803 に答える