我正在使用Nlog,我需要更改默认日志的名称以包含诸如公司名称之类的信息。我很久以前在一个控制台应用程序上使用了此代码,它按预期重命名了该文件。
我现在正在尝试在新应用中使用相同的代码,它正在创建一个新的日志文件,而不仅仅是重命名当前文件。例如,我现在有两个文件(2019-10.07.log
和2019-10-07_CompanyName.log
)。默认日志将只有很少的初始日志条目,然后将其余的日志放入新日志中。
正在寻找任何建议。我一直在寻找修复程序,但一切都使我回到了我已经在使用的代码。
NLog v4.6.7
fileNameOnly = "CompanyName";
FileTarget defaultTarget = FindNLogTargetByName("DefaultTarget");
defaultTarget.FileName = logDirectory + string.Format("{0:yyyy-MM-dd}", DateTime.Now) + "_" + fileNameOnly + ".log";
LogManager.ReconfigExistingLoggers();
您可以使用全局诊断上下文(GDC)来执行此操作,如下所示:
nlog.config:
<target name="file"
xsi:type="File"
fileName="myLogDirectory/${date:format=yyyy-MM-dd}${gdc:filenamePostfix}.log" />
知道公司名称时设置“ filenamePostfix”。
using NLog;
...
// file target logs to myLogDirectory/2019-10-07.log
GlobalDiagnosticsContext.Set("filenamePostfix", "_companyName");
// file target now logs to myLogDirectory/2019-10-07_companyName.log
然后无需重新配置:)
如果您需要有限的范围,例如死掉一个线程而不是全局线程或using
线程,然后使用MappedDiagnosticsLogicalContext或NestedDiagnosticsLogicalContext,请参见https://github.com/NLog/NLog/wiki/Context