-1

C# のアプリケーションで log4net を使用したいと考えています。

log4net: の構成ファイルを作成ConsoleTest.exe.log4netし、プロパティ オプションで設定して、宛先フォルダーにコピーします。

<configuration>
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newlineExtra Info: %property{testProperty}%newline%exception" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
            <levelMax value="FATAL" />
        </filter>
    </appender>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d [%t] %-5p %c %m%n"/>
        </layout>
    </appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="mylogfile.txt"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <maxSizeRollBackups value="5"/>
  <maximumFileSize value="10MB"/>
  <staticLogFileName value="true"/>
  <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="test"/>
  </filter>
  <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="error"/>
  </filter>
  <filter type="log4net.Filter.DenyAllFilter"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/>
  </layout>
</appender>
    <root>
        <level value="INFO"/>
        <appender-ref ref="RollingFileAppender"/>
    </root>
    <logger name="Log4NetTest.OtherClass">
        <level value="DEBUG"/>
        <appender-ref ref="RollingFileAppender"/>
    </logger>
</log4net>

Visual Studio 2012 のプロジェクトのプロパティで、ファイルAssemblyInfo.csに次を追加しました。

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

ログに記録したいクラスに次を追加しました:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

しかし、私がこのクラスで書くとき:

log.Debug("This is a DEBUG level message. The most VERBOSE level.");
log.Info("Extended information, with higher importance than the Debug call");
log.Warn("An unexpected but recoverable situation occurred");

出力で何も得られません:(

どこに問題がありますか?

編集: 構成ファイルは正しいですか?

4

3 に答える 3

1

「アウトプット」とはどういう意味ですか?

ログファイルは作成されていますか? フィルターは、'test' または 'error' を含まないすべてのログを除外しますが、長さ 0 のファイルを作成する必要があります。これを修正するには、フィルタ エレメントを取り外します。

この構成を使用すると、コンソールとトレース ロガーは何も受信しません。コンソール出力を表示するには、ルート要素に <appender-ref ref="ConsoleLogger" /> を追加します。

エラーではありませんが、log4net 構成に別のファイルを使用する場合は、log4net セクションのみが必要です。基本も確認してください。構成ファイルはビルド出力の一部ですか?

于 2013-11-04T10:28:35.930 に答える
1
 <filter type="log4net.Filter.StringMatchFilter">
   <stringToMatch value="test"/>
 </filter>
 <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="error"/>
  </filter>
 <filter type="log4net.Filter.DenyAllFilter"/>

これらの行は、 testまたはerrorを含むメッセージのみをログに記録することを意味します。

また、構成用の終了タグが欠落しているようです。

于 2013-11-04T11:47:00.357 に答える