2014-01-16 22 views
18

log4netが設定されているが、ログファイルが作成されていないプログラムでエラーが発生します。私はロギングがプログラムで設定されていることを確信しています。これは、他のユーザーが同じ設定ファイルを使用してログファイルを作成したためです(ファイルパスを除く)。私はパスへの書き込み権限を持っていると確信しています。プログラムが失敗した時点では、絶対にログの初期化をパスしているに違いありません。Log4netがログファイルを作成していません

この設定ファイルで何かが間違っているのか、それとも誰かが似たような問題を経験していて、プログラム内で探すべきことを知っていますか?ログを取得しようとしていますか?ここで

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="AutoTag" type="System.Configuration.NameValueSectionHandler"/> 
    <section name="WindwardReports" type="System.Configuration.NameValueSectionHandler"/> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"/> 
    </configSections> 

    <AutoTag> 
    <add key="_debug" value="true"/> 
    </AutoTag> 

    <WindwardReports> 
    <add key="line.break" value="internal"/> 
    </WindwardReports> 

    <appSettings> 
    <add key="sql.timeout" value="240"/> 
    </appSettings> 

    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 

     <param name="File" value="C:\Users\loganm\Documents\Catapult.log"/> 

     <param name="AppendToFile" value="true"/> 
     <param name="MaxSizeRollBackups" value="2"/> 
     <param name="MaximumFileSize" value="100KB"/> 
     <param name="RollingStyle" value="Size"/> 
     <param name="StaticLogFileName" value="true"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] ac.server %-5p %c - %m%n"/> 
     </layout> 
    </appender> 

    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="RollingFileAppender"/> 
    </root> 
    </log4net> 
</configuration> 

答えて

35

は、アプリケーションに次のコードを与えますアドバイス(あなたの設定ファイル名に言及するかどうかを指定してください):

[assembly: log4net.Config.XmlConfigurator] 

または

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)] 

希望する!

5

は、考慮すべきいくつかの可能なものです:

  1. たぶん、あなたはあなたの同僚とは異なるlog4netのDLLのバージョンを使用していますか?バックスラッシュエスケープを使用するために、ファイル名を変更、すなわち「C試してみてください

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    
  2. :それを短くする、すなわち、バージョンとconfigセクションから公開鍵情報を削除してください\\ユーザー\\ loganmの\ ... "代わりに、スラッシュ "C:/ Users/loganm/..."を使用してみることもできます。

  3. プログラムを実行する前に再構築する場合は、実際に同僚と同じAssemblyInfo.csを使用していることを確認してください。 1つのよくある間違いは、そこでロガーを初期化することを怠ることです。これは、一番下にこのようなものを持っている必要があります。

    // log4netの活性化
    [アセンブリ:log4net.Config.XmlConfigurator]

+1

これは完璧な解決策です。 –

-2

は私が問題を発見し、残念ながらそれだけではロギングがいなかったました実際にプログラムに設定されていて、私は間違った情報を与えられました。

log4net.Config.XmlConfigurator.Configure(); 

あなたはGlobal.asaxの中でそれを定義することができます:

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

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

あなたはまた、ケビンとして次の行を追加することができ、あなたのロギングコードを配置する前に

+0

これはコメントではなく、答えにしてください。 – granadaCoder

3

log4net.configファイルの[出力ディレクトリにコピー]プロパティが[コピーしない]でないことを確認してください。

実際に最善の解決策は、背面側に行くいただきまし追跡する

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

を追加しています。それは問題を検出するのに役立ちます。

+0

log4netの内部ログは '出力'ウィンドウに表示されます。 – matrix