2

私のアプリケーションはLog4netを使用してイベントビューアに書き込みます。これが私のプログラムのApp.configファイルのlog4netセクションです。

<log4net>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
        <applicationName value="CarSystem" />
        <logName value="CarSystemLog" />
        <threshold value="DEBUG" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="EventLogAppender" />
    </root>
</log4net> 

現在、これらの設定は、昨日の午後12時30分頃まで正常に機能していました。突然(もちろん、ログ内のメッセージを確認する必要があるときだけ)、ログファイルへの書き込みが停止しました。

カスタムイベントログはビューアにあります。今日マシンを再起動しましたが、それでもログに新しいものは何も入っていません。最大ログサイズを10880KBに増やしました。

log4netがログファイルに書き込みを行わないのはなぜですか?

4

2 に答える 2

11

解決策を探すのではなく、原因を見つけてください。

log4netの内部デバッグログをファイル(任意のファイル)に有効にすると、問題がそこにダンプされることをお勧めします。ログファイル(イベントログでも同じである必要があります)が表示されなかったときに、これを何度も使用しました。

ここでそれを構成する方法の説明。

クイックステップ:

  • これをapp.configに追加します。
 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
     <appSettings>
         <add key="log4net.Internal.Debug" value="true"/>
     </appSettings>
 </configuration>
  • configurationこれも設定(セクション)に追加します。
 <system.diagnostics>
    <trace autoflush="true">
        <listeners>
              <add 
              name="textWriterTraceListener" 
              type="System.Diagnostics.TextWriterTraceListener" 
              initializeData="C:\tmp\log4net.txt" />
        </listeners>
    </trace>
 </system.diagnostics>

権限などの問題がある場合は、トレースファイルに記録されます。

于 2012-06-27T17:17:33.207 に答える
2

Log4Netのドキュメントに戻って、次のステートメントに気づきました。

アプリケーションの起動中、そして確実に外部アセンブリがロードされて呼び出される前に、できるだけ早くロギング呼び出しを行うことが不可欠です。

そうですね、AssemblyInfo.csにXmlConfiguration属性がありLogManager.GetLogger、コードにへの呼び出しがありましたが、WPFアプリケーションのオブジェクトのコンストラクターに追加した監視オブジェクトを開始するための呼び出しの後でしたApp。このステートメントを読んでコードを確認したときに、この呼び出しを追加した後、ロギングが停止したことに気付きました。

そこで、呼び出しをコンストラクターLogManager.GetLoggerの最初のステートメントに移動するAppと、ロギングが再開されました。ハレリューイア!

ヘルプと提案をありがとう。

于 2012-07-06T20:52:43.897 に答える