【发布时间】:2019-07-20 05:03:11
【问题描述】:
我有如下的 NLog 配置。
如果存在,它会打印线程的名称。否则我会得到空字符串而不是线程名称。
问题:如何归档以下行为?
- 如果线程有名称 - 打印线程名称
- 否则 - 打印 ManagedThreadId(例如,与
threadidNLog 变量相同)。
当前配置示例:
<variable name="defaultLayout" value="${date} ${level} [${threadname}] ${logger} - ${message} ${exception:format=ToString}"/>
<targets async="true">
<target name="ConsoleAppender"
type="ColoredConsole"
layout="${var:defaultLayout}" />
</targets>
请注意:我想避免打印这两个变量,例如这个布局没用:... [${threadname}-${threadid}] ...
【问题讨论】:
-
如果您可以同时记录线程 ID 和线程名称(如果有),您可以简单地定义自己的布局... (nlog-project.org/config/?tab=layout-renderers)
-
@elgonzo,我同意。但是我只想从上面写一个变量。会注意到这一点,谢谢。
-
仅供参考:如果您真的想仅在不存在线程名称的情况下输出线程 ID,请确保您不会在日志中混淆两者。毕竟,某个线程可能被命名为“123”,而另一个(未命名)线程的线程 ID 可能是 123...
-
我不确定,但也许可以使用条件布局渲染器之一 ${When} 或 ${WhenEmpty}...
-
@elgonzo,当然可以。我们的大多数线程都有漂亮的名称,例如“XXX Object Loader”或“YYY Data Publisher”。我们希望在日志中包含这些名称并避免添加线程标识。你是对的,在这种情况下,id 为 123 的线程将以与名称为“123”的线程相同的方式打印。关于 ${WhenEmpty} - 同意,将检查并发布结果。
标签: c# .net multithreading logging nlog