NLog 基于静态变量创建日志文件

Posted

技术标签:

【中文标题】NLog 基于静态变量创建日志文件【英文标题】:NLog create log files based on static variable 【发布时间】:2015-10-01 18:55:39 【问题描述】:

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

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

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

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

----------更新--------------

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

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

谢谢。

【问题讨论】:

【参考方案1】:

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

在代码中:

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

【讨论】:

拥有可以在运行时设置的 $note 会很有用。我在此列表中找不到任何内容:github.com/NLog/NLog/wiki/Layout-Renderers @Farukh:抱歉,我不知道有这样的功能。 查看更新的问题。感谢您的快速回复。 @Farukh:要更改 NLog 配置中的变量值,请参阅:github.com/NLog/NLog/issues/694。我没有给出确切的代码,因为我没有测试过。根据 github 上的最新帖子,我希望它能够工作。【参考方案2】:

简单的解决方案是使用 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

【讨论】:

以上是关于NLog 基于静态变量创建日志文件的主要内容,如果未能解决你的问题,请参考以下文章

NLog 实现日志输出到文件详细步骤

封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil

从 msi 安装程序安装时,NLog 不写入日志

NLog 文件归档

如何强制 NLog 覆盖日志文件

Nlog - Web.config 规则 - 仅用于 Global.asax 文件的日志文件?