1

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

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

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

感谢任何想法。

4

3 回答 3

1

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

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

其次,您将能够重新配置当前文件目标以写入另一个文件(或其他文件。在以编程方式添加、启用和禁用 NLog 记录器log(n+1).txt有一些关于编程配置的提示)。因此,您将确定该应用程序没有记录到该文件。

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

于 2013-10-04T20:08:16.400 回答
1

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

于 2013-10-04T11:08:42.037 回答
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

于 2013-12-30T15:31:22.593 回答