[英]NLog create log files based on static variable
如何根据应用程序中的静态变量设置 NLog 文件名。
我有执行不同任务的 Windows 服务。 读取包含任务详细信息的配置文件。 我想根据给定的任务名称创建日志文件。
注意:类名不起作用,因为所有任务都调用相同的代码。
注意:我已经在使用 ${logger} 变量作为我当前的类。 因为我也需要知道我在哪里。
- - - - - - -更新 - - - - - - -
似乎这是不可能做到的。 修改问题:如何在运行时设置变量值? 我正在谈论这个:
<variable name="logFileName" value="" />
谢谢你。
你不能,我相信。 但是你可以使用这样的东西:
在代码中:
static NLog.Logger loggerA = NLog.LogManager.GetLogger("nameA");
static NLog.Logger loggerB = NLog.LogManager.GetLogger("nameB");
void Something()
{
loggerA.Error("Something");
}
void SomethingElse()
{
loggerB.Error("SomethingElse");
}
NLog 配置:
<nlog ...>
<targets>
<target name="Error" xsi:type="AsyncWrapper">
<target name="file" xsi:type="File" fileName="${basedir}/Logs/Error.txt">
<layout ... />
</target>
</target>
</targets>
<!--other targets pointing to different files.-->
<rules>
<logger name="nameA" minlevel="Warn" writeTo="Error" />
<logger name="nameB" minlevel="Trace" maxLevel="Info" writeTo="Log" />-->
<logger name="*" minlevel="Trace" maxLevel="Info" writeTo="CommonLog" />
</rules>
</nlog>
您还可以使用SomeNamespace.Component.*
作为记录器的名称,并且只有来自SomeNamespace.Component
日志将通过它记录。 在这种情况下,记录器将像这样获得:
static NLog.Logger loggerA = NLog.LogManager.GetCurrentClassLogger();
这是 Nlog 的文档: https : //github.com/NLog/NLog/wiki/Tutorial
有一种以编程方式编辑 NLog 配置的方法: https : //github.com/nlog/NLog/wiki/Configuration-API
简单的解决方案是使用 NLog GlobalDiagnosticsContext:
<target name="file" xsi:type="File" fileName="${gdc:logFileName:whenEmpty=DefaultApp}.txt">
然后你可以像这样覆盖它:
NLog.GlobalDiagnosticsContext.Set("logFileName", "HelloApp");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.