12

新しいログをファイルに追加したい.これは私のアペンダーです:

<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="All"/>
  <appender-ref ref="RollingFileAppender"/>
</root>

そして私のクラスに追加します

[assembly: XmlConfigurator(Watch = true)]

ファイルへのアクセス権を全員に追加しますが、log4netはファイルに書き込みません。なんで?

4

4 に答える 4

29

問題が発生すると、Log4net は黙って失敗します。設計上の思い込みは、アプリケーションを停止するよりもログを記録しない方が望ましいというものです。何が問題なのかを突き止めるには、次のキーを [app/web].config ファイルに追加して、Log4net の内部デバッグを有効にします。

<appSettings>
  <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

デバッグ メッセージは、コンソールまたはSystem.Diagnostics.Traceシステムに書き込まれます。Phill Haack の詳細はhttp://haacked.com/archive/2006/09/26/Log4Net_Troubleshooting.aspx/にあります。

Log4net が失敗する理由はいくつもあります。まず、ログ ファイル ディレクトリのアクセス許可の問題 (特に、セキュリティのために制限されたアクセス許可のセットで実行されている可能性が高いサーバー プロセスに当てはまります)。

于 2013-07-24T18:08:35.017 に答える
3

Configure を呼び出すだけです。

log4net.Config.XmlConfigurator.Configure();

ここで詳細を確認できます: Log4net はログ ファイルを書き込みません

于 2016-06-25T13:34:54.497 に答える
0

アプリの最初のステップとして、[assembly]タグを持っているのと同じアセンブリからログを初期化する必要があります。

ドキュメントから:

したがって、構成属性を使用する場合は、log4net を呼び出して属性を読み取れるようにする必要があります。を単純に呼び出すと LogManager.GetLogger、呼び出し元のアセンブリの属性が読み取られて処理されます。したがって、アプリケーションの起動中はできるだけ早く、確実に外部アセンブリが読み込まれて呼び出される前に、ロギング呼び出しを行うことが不可欠です。

起動コードに次のようなものを追加します。

LogManager.GetLogger("Initialises logging from assembly attributes");
于 2013-07-24T15:57:54.347 に答える