web-dev-qa-db-ja.com

Log4netはログファイルを書き込みません

Log4netを使用して簡単なシナリオを作成しましたが、ログファイルにメッセージが追加されないため、アペンダーが機能しないようです。

Web.configファイルに次を追加しました。

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

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="D:\MyData\Desktop\LogFile.txt" />
            <appendToFile value="true" />
            <encoding value="utf-8" />
            <layout type="log4net.Layout.SimpleLayout" />
    </appender>


    <root>
        <level value="INFO" />
        <appender-ref ref="LogFileAppender" />
    </root>
</log4net>

グローバルASAXファイル内に追加したもの:

ILog logger = LogManager.GetLogger(typeof(MvcApplication));

そして、Application_Startメソッド内で:

logger.Info("Starting the application...");

私は何を間違えましたか?

149
john84

電話しますか

log4net.Config.XmlConfigurator.Configure();

log4netに設定を読み取らせる場所はどこですか?例えば。 Global.asaxで:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}
298

このFAQページを使用してください: Apache log4netよくある質問

約3/4の方法で、アプリケーショントレースを使用してlog4netデバッグを有効にする方法を示します。これにより、問題の場所がわかります。

基本は次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

そして、標準出力にトレースが表示されます

45
bechbd

@AndreasPaulssonが示唆したように、設定する必要があります。 AssemblyInfoファイルで構成を行っています。ここでconfiguration file nameを指定します。

// Log4Net Configuration.
[Assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
32
Lijo

また、「常にコピー」オプションがこのように[log4net] .configに対して選択されていることを確認してください画像:

enter image description here

27
kokabi

サイトが実行されているプロセス(アカウント)が出力ディレクトリに書き込む権限を持っていることを確認してください。

IIS 7以降では、これはアプリケーションプールで構成され、通常は AppPool Identity であり、通常はすべてのディレクトリへの書き込み権限がありません。

イベントログ(アプリケーションとセキュリティ)をチェックして、例外がスローされたかどうかを確認します。

22
Oded

インサート:

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

AssemblyInfo.csファイルの最後

18
shay

私の場合、プロジェクト名にスペースが含まれているため、log4netは適切にログを記録していませんでした。同じコードが別のプロジェクトではうまく機能したが、新しいコードではうまくいかなかった理由を私に夢中にさせた。スペース。シンプルなスペース。

そのため、プロジェクト名にはスペースを入れてください。私はレッスンを学びました。

1
zanussi

私にとっては、ログファイルの場所を移動しましたが、それはファイルの名前を別の名前に変更したときだけでした。

同じ名前のログファイルがすでに存在する場合、何も起こりません。

その後、古いファイルの名前を変更し、構成内のログファイル名を元に戻しました。

1
kernowcode

私の場合、ログファイルにIIS_IUSRS読み取り/書き込み権限を付与する必要がありました。

0
Rahatur