NLog根据静态变量创建日志文件

时间:2015-10-01 18:55:40

标签: c# logging nlog

如何在我的应用程序中根据静态变量设置NLog文件名。

我有执行不同任务的Windows服务。读取包含任务详细信息的配置文件。 我想根据给定的任务名称创建日志文件。

注意:类名不起作用,因为所有任务都调用相同的代码。

注意:我已经使用$ {logger}变量作为我当前的类。因为我需要知道我在哪里。

------------- UPDATE --------------

似乎这样做是不可能的。 修改后的问题:如何在运行时设置变量值? 我在说这个:

<variable name="logFileName" value="" />

谢谢。

2 个答案:

答案 0 :(得分:0)

你不能,我相信。但你可以使用这样的东西:

在代码中:

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 config:

<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

答案 1 :(得分:0)

简单的解决方案是使用NLog GlobalDiagnosticsContext:

<target name="file" xsi:type="File" fileName="${gdc:logFileName:whenEmpty=DefaultApp}.txt">

然后您可以像这样覆盖它:

NLog.GlobalDiagnosticsContext.Set("logFileName", "HelloApp");

另请参阅:https://github.com/nlog/nlog/wiki/Gdc-Layout-Renderer