我有一个ClickOnce部署的WinForms应用程序。用户可以启动应用程序的多个实例。每个实例都应写入单独的日志文件。我需要能够在运行时发现当前实例的日志文件,因此我可以使用它来发送崩溃报告等。
现在我无法解决多个实例的要求。 (他们真正需要的是一个标签式UI,但这是一个遗留应用程序的一大堆,我现在无法实现它。)
在一般日志记录工作中,但单独的应用程序实例会覆盖同一文件。
我曾尝试在日志文件名中添加时间戳,但这不起作用:
<target name="logfile" xsi:type="File"
fileName="${specialfolder:folder=ApplicationData}/MyCompany/CRM/crm_${longdate}.log"
deleteOldFileOnStartup ="true"
layout="${longdate} ${message} ${exception:format=tostring}"/>
这有可能吗?
答案 0 :(得分:3)
在您的应用程序的上下文中,您是否知道该实例的有效(且有意义)名称?是否可以使用表示应用程序名称的命令行参数启动多个实例?如果你能&#34;知道&#34;一个有用的应用程序名称,然后您可以将名称存储在GlobalDiagnosticsContext中,并使用GlobalDiagnosticsContext LayoutRenderer来构建您的文件名。
因此,您的配置可能如下所示:
<target name="logfile" xsi:type="File"
fileName="${specialfolder:folder=ApplicationData}/MyCompany/CRM/crm_${gdc:item=application}.log"
deleteOldFileOnStartup ="true"
layout="${longdate} ${message} ${exception:format=tostring}"/>
在您的应用程序启动逻辑中,您可以像这样设置gdc:
GlobalDiagnosticsContext.set("application", GetApplicationNameFromCommandLineArgs());
每个应用程序都将写入自己的日志文件,该文件基于命令行参数命名。
祝你好运!