7

我想将当前log4net日志作为电子邮件附件发送,System.Net.Mail.Attachment但是当我传入文件路径时IOException会抛出一个。

Attachment mailAttachment = new Attachment(logPath);

该进程无法访问文件“C:\Log\log4net.log”,因为它正被另一个进程使用

appender 配置如下所示:

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

using<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />将告诉 log4net 在执行实际写入时仅将文件锁定一小段时间。有轻微的性能损失,但允许您更轻松地执行诸如将其添加为附件之类的操作。

否则 log4net 将在进程运行时无限期地锁定文件。

于 2013-01-08T18:49:21.940 回答