我想在每个应用程序运行之间删除我的Nlog日志文件,只要它成功通过电子邮件发送给我,否则它应该继续添加到日志文件中。我使用Outlook通过电子邮件发送文件。我不想使用Smtp,因为有些网络阻止端口25,然后它不会通过电子邮件发送给我。
问题是当我尝试使用File.Delete(logfile)删除日志文件时表示该文件正由aonther进程使用。如何解锁或关闭文件以便我使用Outlook发送电子邮件(然后重新打开以进一步记录)?
我正在考虑制作日志文件的副本并通过电子邮件发送,但我不确定它是否是最好的方法。
感谢任何想法。
答案 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()