2011-05-31 75 views
3

我们使用Log4Net和FileAppender在进程中记录错误。当这个过程结束时,我们想通过电子邮件发送日志文件,但是我们无法做到这一点,因为Log4Net仍然对文件有锁定,并且我们收到一条消息,说明该文件正在被另一个进程使用。有任何想法吗?Log4Net - 文件进程锁定

我们正在使用的配置是这样的:

<appender name="WarnFileAppender" type="log4net.Appender.FileAppender"> 
    <file value="d:\for-review-log.txt" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %logger - %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="INFO" /> 
     <levelMax value="WARN" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    <appendToFile value="false"></appendToFile> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    </appender> 

回答

4

我假设日志是从某种服务,所以日志将被锁定,直到服务正在运行。

您可能想要在读取文件进行发送时使用共享锁。

或者您可以复制文件并发送副本。

+0

嗨Alex,日志来自控制台应用程序进程,这将锁定文件。我已经在使用Appender的FileAppender.MinimalLock设置。复制文件可能是一个选项... – 2011-05-31 07:48:15

+0

@Steve Ward - 您是否可以访问发送日志的应用程序的代码?如果是这样,您可能需要对其进行更改。它不应该计算该文件现在不被使用,因此它可以使用共享锁读取文件或执行文件复制。 – 2011-05-31 07:51:41

+0

是的,复制文件似乎工作。谢谢... – 2011-05-31 08:06:40

0

我得到了同样的问题。当我尝试使用SMTPmailAppender,但似乎无法以某种方式工作时,Olso flush也不起作用。但是当我使用我自己创建的类来发送电子邮件时,它的工作原理,只有他不添加附件(日志文件)

+1

为什么不把注意力放在你说的一件事上,而不是让你看起来好像你在这里没有答案?这是关于营销你的答案(积极),而不是像你被困住。 – Drew 2015-12-24 15:05:23