将NLog与多个应用实例配合使用

时间:2014-12-22 17:49:29

标签: .net clickonce nlog

我有一个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}"/>

这有可能吗?

1 个答案:

答案 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());

每个应用程序都将写入自己的日志文件,该文件基于命令行参数命名。

祝你好运!