.net - NLog 配置 API : Using Layouts stored in variables

标签 .net logging configuration nlog

我的应用程序会为应用程序本身创建一个日志,以便记录它何时被激活,以及在应用程序级别发生了什么。

应用程序以“配置文件”为中心 - 用户加载一个配置文件,该配置文件告诉应用程序在哪里/何时/什么/如何。所以我还想为每个配置文件创建一个日志,以记录每次配置文件运行时的进度。

到目前为止没有问题...除了我希望将配置文件日志与配置文件本身一起存储,因此这意味着我需要动态配置 NLog,以便在运行时告诉它 fileTarget 路径。

但是,我也想将我想要使用的标准布局存储为 NLog.config 中的变量;从我所读到的内容来看,这似乎是一种足够普遍的方法。

但是,在下面一行

fileTarget.Layout = "${myLayout}"

...我得到一个 ArgumentException:

LayoutRenderer cannot be found: 'myLayout'

目前,我的布局变量很简单:

<variable name="myLayout" value="${message}" />

是不是不能通过API使用变量来指定布局?如果是这样的话,我会感到惊讶。还是我哪里出错了?

解决方案很简单——我可以使用手动指定的布局填充 fileTarget.Layout,但是,我很想知道 A 计划是否可行。

最佳答案

我获得了最新的源代码 (NLog 3.2.0.0) 并想出了一个无需对 NLog 进行任何更改即可支持的解决方案。下面的代码获取变量的值。我认为它也可以被写入,但我没有尝试过,因为我不需要那个功能。这就回答了这个问题。最后一行计算变量中的文本以呈现它包含的任何布局渲染器。

var config = (NLog.Config.XmlLoggingConfiguration)LogManager.Configuration;
string dir = config.Variables["logDirectory"];
dir = NLog.Layouts.SimpleLayout.Evaluate(dir);

关于.net - NLog 配置 API : Using Layouts stored in variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635616/

相关文章:

javascript - 未捕获的语法错误 : Unexpected token <

java - 如何在 Selenium WebDriver 中获取 native 记录器

sql-server - 截断 SQL Server 日志文件的命令是什么?

linux - 根据conf文件替换文件的值

c# - 空字符串的目的是什么?

c# - 解压缩 gzipstream 时出错——GZip header 中的魔数(Magic Number)不正确

c# - 我的日志管理器的路径共享违规

xml - 无法通过仅针对 WCF 的配置正确公开 REST XML、REST JSON 和 SOAP

windows - Windows 中的 cmake 问题

c# - 获取 Linq 表达式的别名