2009-02-23 106 views
20

私はログファイル名に日付を追加しようとしていましたが、私はstackoverflowで見つけたいくつかの提案に従って動作させることができました。すべて正常に動作しますが、何らかの理由で、最初のファイルには常に日付が2回追加されます。例えばLog4Netを使用していると、ファイル名に日付が2度追加されるのはなぜですか?

、代わりのlog.2009-02-23.logは、私がlog.2009-02-23.log.2009-02-23.logを取得します。

私はそれがとても奇妙でfyiであることを発見しました。これは非常に単純なコードです。私はマルチスレッド環境で動作しているのと同じではありません。

私log4netの設定ファイル:

<log4net> 
<appender name="MyLog" type="log4net.Appender.RollingFileAppender"> 
    <file value="../../Logs/Mylog"/> 
    <staticLogFileName value="false" /> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <datePattern value=".yyyy-MM-dd.lo\g" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/> 
    </layout> 
</appender> 
<root> 
    <level value="INFO"/> 
    <appender-ref ref="MyLog"/> 
</root> 
</log4net> 

任意のアイデアなぜですか?

編集:私は私はこれをテストしていた環境についての情報を追加したい
- asp.net
- の.NET Framework 2.0
- Windows Server 2003 64ビットのサービスパック2
- 。 log4net 1.2.10

答えて

5

それは権限の問題です:これにより

<param name="DatePattern" value="yyyy.MM.dd.\l\o\g"/> 

私のようなファイル名を取得します。少なくともそれは私に起こっていることです。

私はLog4Netを使っていないので、内部ログがあることを知らなかったが、見つけたので、internal loggingをオンにしてみました。 私はそれが何を言っているのかよく分かっていませんでしたが、それは私のように見えます: 1.日付をファイル名に追加します。 2.ファイルにアクセスして書き込みを試みます(失敗しました)。 3.ファイル名に再度日付を追加します。。 4.ファイルへのアクセスに成功しました(今は奇妙なファイル名になっています)

私はこれを知る前に、この問題に対する解決策として、このstackoverflow質問のタイトルのようなキーワードを使用していました。そこにはあまり情報がありませんでした。私は多分それは何人かの人に起こると言ったが、実際に理由や解決策を説明したことのない1人の男を見つけました。この新しい情報(Log4Netの内部エラーメッセージ)では、私は検索エンジンとは異なるスレッドを探していました。私はそれが許可の問題かもしれないというヒントを見つけました。

書き込みアプリケーションにログフォルダに対する十分な権限がないようです。アプリケーションのデフォルトのIDは通常NETWORK_SERVICEです。フォルダーにもっと多くのアクセス許可を与えた後(私はそれを完全に制御することができましたが、それが動作する最小限のものはわかりません)、うまく動作します。

誰かが私よりもこのことをよく説明できる場合は、自由に編集してください。

+0

フルコントロールを使用すると、ファイルに設定されているアクセス権を変更したり、ファイルの所有権を取得したり、他のすべてのファイルアクセス許可で許可されている操作を実行したりすることができます。 – graffic

0

try <datePattern value=".yyyy-MM-dd.lo\g" />私は\ gを理解していません。

+1

datePatternタグは、値として日付と時刻でフォーマットされた文字列を受け入れます。 "g"は有効な日付と時刻の書式パターン(google DateTimeFormatInfo)なので、「エスケープ」して解釈されないようにする必要があります。 –

+0

あなたが使用しているlog4netのバージョンと残りの環境(os、.netバージョンなど)についてもっと教えてください。ログからgをエスケープしなければならないということは決して問題になりませんでした。 – olle

+0

- Windows Server 2003 x64 Service Pack 2 - .NET Framework 2.0 - log4net 1.2.10 gをエスケープすることについて、私のコメントをdevinbに見てください。 –

1

olleが指摘したとおりです。あなたの問題はlog4netが別のdateformatとして解釈している '\ g'に関連しています。 ".yyyy-MM-dd.loの\ gを" 削除して

"の.log" DATEFORMATに属していない

+0

".log"を置かないと、拡張子なしの "log.2009-02-23"のようなファイル名が得られます。そうでない場合は、日付は拡張子です。ブラウザからログフォルダにアクセスしたいので、IISのフォルダのMIMEタイプリストに ".log"を追加する必要がありました。 –

+0

"\"が問題であるかどうかを確認するには、 ".lo \ g"と ".log"なしで試しましたか? – DevinB

+0

また、 "。"最初は – DevinB

1

私が使用して "YYYY-MM-DD" とそれを交換してみてください次2009.02.23.log

+0

あなたは実際には必要ありません –

10

これは、ログシステムを初期化するときにログファイルにアクセスする際に問題が発生した場合に発生します。 ログシステムを2回初期化した場合、別のコピーの実行中にプログラムを実行してログファイルに書き込む場合、またはテキストエディタでログファイルを編集する場合に発生する可能性があります。基本的にlog4net initが実行されたときにログファイルに書き込みロックを引き起こすもの。

log4net initへの重複呼び出しのコードをチェックします。たとえば、シングルトンの静的コンストラクタやグローバルinitではなく、コンストラクタで初期化していることがあります。

これは、「Webガーデン」設定で実行していて、ファイル名にPIDを含めない場合にも発生する可能性があります。これは、異なるWebサーバープロセスがそれぞれ同じファイルに書き込もうとするためです。 Webガーデンを使用してファイルに書き込む場合は、各サーバープロセスが独自のファイルを取得できるように、pidをファイル名パターンに追加します。

1

同じ問題が発生します。私にとっては、テストログにRollingFileAppenderを使用し、ReSharperでNUnitテストを実行するという組み合わせでした。

それはReSharperのは、テストを実行するためにのプロセスを使用していることが判明:ログファイルの競合状態を作成

2 TaskRunners

を。

今、私たちはプロセスID含まれるようにログファイル名を変更する場合:問題が解決され

<appender name="MyLog" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="MyLog.pid.%processid" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="false"/> 
    <datePattern value="_yyyy-MM-dd'.log'"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p '%40.40c' - %m%n" /> 
    </layout> 
</appender> 

を。 PatternStringの使用に注意してください

MyLog.pid.5440_2010-10-13.log
MyLog.pid.1496_2010-10-13.log

:各ファイルには、独自の、ユニークな名前を取得します'タイプ'のために。

希望に役立ちます。

関連する問題