web-dev-qa-db-ja.com

WebアプリケーションでLog4Netを構成する

私はこのコードと以下の設定ファイルを持っています:

ILog log = LogManager.GetLogger(typeof(MyClass));
log.Debug("Testing");

TestProjディレクトリは作成されません。作成した場合、TestLog.txtファイルもログもありません...何もありません。

何か案が?

おかげで、

構成ファイル

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\\TestProj\\TestLog.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
62
Kris-I

ConfigureXmlConfiguratorfunctionを呼び出す必要があります

log4net.Config.XmlConfigurator.Configure();

最初のログイン呼び出しの前に呼び出すか、Global.asaxで次のように呼び出します。

protected void Application_Start(Object sender, EventArgs e) {
   log4net.Config.XmlConfigurator.Configure();
}
119
shriek

これを行う別の方法は、この行をWebアプリケーションのアセンブリ情報に追加することです。

// Configure log4net using the .config file
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]

シュリークに似ています。

22
keni

1:AssemblyInfoクラスに次の行を追加します

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

2:.Net Framework 4 Client ProfileTarget Frameworkとして使用しないようにしてください(そうしないとコンパイルできないので、これはあなたの側で問題ないと思います)

3:プログラムの非常に早い段階でログを記録してください。そうしないと、一部のシナリオでは、適切に初期化されません(詳細については log4net FAQ を参照してください)。

Global.asaxでアプリケーションの起動中に何かを記録する

public class Global : System.Web.HttpApplication
{
    private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(Global));
    protected void Application_Start(object sender, EventArgs e)
    {
        Log.Info("Startup application.");
    }
}

4:指定されたパスにファイルとフォルダーを作成する権限があることを確認します(フォルダー自体も存在しない場合)

5:与えられた情報の残りは大丈夫に見える

9
hwcverwe

多くの場合、これは権限がないためです。ローカルIISアプリケーションプールが実行されているWindowsアカウントには、アプリケーションディレクトリへの書き込み権限がない可能性があります。どこかにディレクトリを作成し、全員に書き込み権限を付与し、log4net configにそのディレクトリを指定できます。ログファイルがそこに作成された場合、アプリプールが書き込みできるように、目的のログディレクトリのアクセス許可を変更できます。

もう1つの理由は、log4netが初期化されていないことです。 winformsアプリでは、通常、アプリケーションの起動時にlog4netを構成します。 Webアプリでは、これを動的に行うことができます(ロギングコンポーネントで、名前を使用して特定のIlogロガーを作成できるかどうかを確認します) 。

2
Dirk Trilsbeek

私も同様の問題を抱えていました。ログが作成されていませんでした。

ロガーの属性名がLogManager.GetLogger( "name")と一致することを確認してください

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



private static readonly ILog Log = LogManager.GetLogger("Mylog");
1
Shakeer Hussain