7

log4netを使用して現在のログを電子メールの添付ファイルとして送信したかったSystem.Net.Mail.Attachmentのですが、ファイル パスを渡すとエラーが発生しますIOException

Attachment mailAttachment = new Attachment(logPath);

別のプロセスで使用されているため、プロセスはファイル 'C:\Log\log4net.log' にアクセスできません

アペンダーの構成は次のようになります。

<appender name="RootRollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="C:\Log\log4net.log" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="10" />
    <param name="MaximumFileSize" value="10024KB" />
    <param name="RollingStyle" value="Size" />
    <param name="StaticLogFileName" value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%username|%thread] %-5level %logger: %message%newline" />
    </layout>
</appender>

これを回避する方法はありますか?ログ ファイルをコピーしたり、ロック プロセスから解放したりできますか?

4

1 に答える 1

16
<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="${TMP}\log-file.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

を使用<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />すると、log4netは、実際の書き込みを行っている間、ファイルを短時間だけロックするように指示されます。わずかなパフォーマンスの低下がありますが、添付ファイルとして追加するなどの作業がはるかに簡単になります。

そうしないと、プロセスの実行中にlog4netがファイルを無期限にロックします。

于 2013-01-08T18:49:21.940 に答える