成功通过电子邮件发送后删除Nlog日志文件

时间:2013-10-04 10:06:16

标签: c# outlook nlog

我想在每个应用程序运行之间删除我的Nlog日志文件,只要它成功通过电子邮件发送给我,否则它应该继续添加到日志文件中。我使用Outlook通过电子邮件发送文件。我不想使用Smtp,因为有些网络阻止端口25,然后它不会通过电子邮件发送给我。

问题是当我尝试使用File.Delete(logfile)删除日志文件时表示该文件正由aonther进程使用。如何解锁或关闭文件以便我使用Outlook发送电子邮件(然后重新打开以进一步记录)?

我正在考虑制作日志文件的副本并通过电子邮件发送,但我不确定它是否是最好的方法。

感谢任何想法。

3 个答案:

答案 0 :(得分:1)

不是Outlook阻止删除文件 - 您的应用程序仍在运行,并且记录到该文件仍处于活动状态,因此它是应用程序的Nlog部分,可防止删除。 告诉nlog使用不同的日志文件,或者根本不记录(稍后你可以继续记录)。

答案 1 :(得分:1)

默认情况下,nlog不会保持文件打开(文件目标,keepFileOpen)。因此,要么在应用程序写入数据时尝试删除文件,要么仍然使用该文件来删除Outlook。

首先,您可能希望通过outlook发送日志文件的副本。因此,您可以确保原始文件未被外部进程锁定。

其次,您将能够重新配置当前文件目标以写入另一个文件(log(n+1).txt或其他内容。在Add, enable and disable NLog loggers programmatically处有一些关于编程配置的提示。因此,您确定应用程序没有登录到该文件。

然后你就可以将它删除了。我想。

答案 2 :(得分:0)

选项1:

if(chkLogger.Checked){
    NLog.Config.SimpleConfigurator.ConfigureForFileLogging("Logfile.log",NLog.LogLevel.Trace);
}
else
{
 NLog.Config.SimpleConfigurator.ConfigureForFileLogging("Logfile.log", NLog.LogLevel.Off);
} 

选项2:LogManager.DisableLogging()和LogManager.EnableLogging()

来自网站Stopping-Starting-NLog-on-runtime