65

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

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>
4

5 に答える 5

120

Configureの関数を呼び出す必要がありますXmlConfigurator

log4net.Config.XmlConfigurator.Configure();

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

protected void Application_Start(Object sender, EventArgs e) {
   log4net.Config.XmlConfigurator.Configure();
}
于 2012-04-18T06:54:42.947 に答える
24

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

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

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

于 2012-04-18T07:05:12.667 に答える
11

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

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

.Net Framework 4 Client Profile2: asを使用していないことを確認してくださいTarget 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: 与えられた残りの情報は問題ないようです

于 2012-04-18T07:01:40.943 に答える
2

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

別の理由として、初期化されていない log4net が考えられます。winforms アプリでは、通常、アプリケーションの起動時に log4net を構成します。Web アプリでは、これを動的に (ログ コンポーネントで、その名前を使用して特定の Ilog ロガーを作成できるかどうかを確認し、そうでない場合は configure() を呼び出して)、global.asax.cs でアプリケーションを開始するときに再度行うことができます。 .

于 2012-04-18T06:48:03.970 に答える