1

私がする必要があるのは、を手に入れることです:

<param name="File" value=".\MyExe.exe.log"/>

値ですが、次を使用してアペンダーにアクセスしようとすると:-

var rootAppender = ((Hierarchy)LogManager.GetRepository())
    .Root.Appenders.OfType<RollingFileAppender>()
    .FirstOrDefault();
var myFilePath = rootAppender != null ? rootAppender.File : string.Empty;

私が得るのはすべてnullです。では、パスにアクセスするにはどうすればよいでしょうか。

これは私のlog4net構成セクションです:-

<log4net threshold="All">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value=".\MyExe.exe.log"/>
      <param name="AppendToFile" value="true"/>
      <param name="ImmediateFlush" value="true"/>
      <param name="RollingStyle" value="size"/>
      <param name="MaxSizeRollBackups" value="5"/>
      <param name="MaximumFileSize" value="1MB"/>

      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
      </layout>

      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    </appender>

    <logger name="MYLOGGER">
      <level value="All"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </logger>

  </log4net>

ありがとう

4

1 に答える 1

1

ファイル名が見つからない理由は、ルート ロガーにクエリを実行しているためです。ただし、構成でルート ロガーが定義されておらず、デフォルトのルートにはアペンダーがリンクされていません。

代わりに、定義済みのロガーを使用してファイル名を取得する次のコードを実行する必要があります。

var loggerAppender = LogManager.GetLogger("MYLOGGER").Logger.Repository
                               .GetAppenders()
                               .OfType<RollingFileAppender>()
                               .FirstOrDefault();

var myFilePath = loggerAppender != null ? loggerAppender.File : string.Empty;
于 2016-03-04T13:16:48.600 に答える