我在NLog中定义了以下两个目标。配置在我的ASP。. NET Core项目:
<targets>
<target name="MyApp" xsi:type="File"
fileName="${specialfolder:folder=ApplicationData}/MyApp/${date:format=yyyyMMdd_HHmmss:cached=true}_MyApp.log"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
deleteOldFileOnStartup="false"/>
<target name="MyAppAll" xsi:type="File"
fileName="${specialfolder:folder=ApplicationData}/MyApp/${date:format=yyyyMMdd_HHmmss:cached=true}_MyApp.log"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
deleteOldFileOnStartup="false"/>
</targets>
MyApp target记录应用程序中所有的日志,而MyAppAll也包括一些框架日志。
我试图让NLog创建两个具有相同时间戳的日志文件,但我观察到的是,MyAppAll将在应用程序启动时立即创建,因为这是时间框架日志开始,而MyApp只会在我向API发送请求时创建,结果是我有两个具有不同日期的文件。
对于如何解决这个问题有什么想法吗?
您可以使用${processinfo:StartTime}
:
<targets>
<target name="MyApp" xsi:type="File"
fileName="${specialfolder:folder=ApplicationData}/MyApp/${processinfo:StartTime:format=yyyyMMdd_HHmmss:cached=true}_MyApp.log"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
<target name="MyAppAll" xsi:type="File"
fileName="${specialfolder:folder=ApplicationData}/MyApp/${processinfo:StartTime:format=yyyyMMdd_HHmmss:cached=true}_MyApp.log"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
</targets>
参见:https://github.com/NLog/NLog/wiki/ProcessInfo-Layout-Renderer
注意,不建议有两个文件目标共享相同的文件名。例如,在nlog5中,默认为KeepFileOpen=true
,则其中一个将停止工作。