29

log4net用に同じように構成された2つのプロジェクトがあります。1つのプロジェクトは正常にログに記録されます。ただし、もう一方はまったくログに記録されません。

Loggerログに記録されていないプロジェクトでは、、、、IsFatalEnabled = falseおよびIsErrorEnabled = falseが返されIsWarnEnabled = falseます。IsInforEnabled = falseIsDebugEnabled = false

あるプロジェクトから別のプロジェクトにコピーして貼り付け、ファイルを完全に置き換えて、すべての空白を削除してみました。

1つのプロジェクトがapp.configから正しいレベルを正しく読み取っていない原因は何でしょうか。

app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="logfile.txt" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date: %-5level – %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="FileAppender" />
    </root>
  </log4net>
</configuration>

Program.cs

using log4net;

class Program
{
    private static readonly ILog Log = LogManager.GetLogger("SO");

    static void Main(string[] args)
    {
        Log.Info("SO starting");
    }
}
4

2 に答える 2

50

app.configファイルがlog4netで監視されるように構成されていないようです。

次の行をに追加するAssemblyInfo.csと、ログが有効になります。

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

奇妙なことに、作業中のプロジェクトにこの行を追加しなかったためです。

編集:

結局、機能していたプロジェクトにはラインがあったようです。忘れたに違いない。

// This will cause log4net to look for a configuration file 
// called [ThisApp].exe.config in the application base 
// directory (i.e. the directory containing [ThisApp].exe) 
// The config file will be watched for changes. 
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
于 2010-08-25T12:23:23.410 に答える
1

私にとっての解決策はXmlConfigurator.Configure()、プログラムのスタートアップコードで使用することでした。ただし、Autofac.log4netモジュールを使用してAutofacILogコンテナーに登録していたという点で、状況は異なりました。この場合、XmlConfiguratorAttributeWatchtrueまたはfalseに設定して)を使用すると、ロガーは未構成のままになります。

于 2019-07-11T10:58:24.653 に答える