gpt4 book ai didi

log4net进程id信息

转载 作者:行者123 更新时间:2023-12-02 02:48:49 25 4
gpt4 key购买 nike

我正在尝试创建一个涉及多台计算机上的多个进程的日志记录解决方案。我计划使用 UDPAppender 将所有日志消息发送到一台管理它们的机器。我有一些关于模式字符串与模式布局的问题。

因为我需要知道日志消息来自哪台机器和哪个进程,所以我也想将其包含在日志中。我发现 %property{log4net:HostName} 作为主机名,效果很好。但是,我在 PatternLayouts 中没有看到任何进程 ID。当然,我确实在 PatternString 中看到了类似的东西。来自常见问题解答:

<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="log-file-[%processid].txt" />

<layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
</appender>

但我不确定是否或如何混合和匹配两者(或者即使这是这样做的规范方法)。

所以,我的问题是:

  1. PatternString 和 PatternLayout 有什么区别?为什么两者都有?

  2. 我在 PatternString 中看到 %processid,如何在 PatternLayout 中获得相同的信息?这是我的测试布局:

    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] [%property{log4net:HostName}] %-5level %logger - %message%newline" />
    </layout>
  3. 最后,对 UDP 附加程序使用 XML 布局是有意义的。看起来 XmlLayoutSchemaLog4j 已经将 HostNameProperty 添加到 XML 消息中。如果我不想将这个新的进程 ID(也可能是进程名称)添加到 XML 消息中,那么最好的方法是什么?我是否应该复制 src\Layouts\XmlLayoutSchemaLog4j.cs,修改它,然后让 log4net 知道我创建了这个新布局(如 SampleLayoutsApp)?

感谢您的帮助

最佳答案

您可以向 GlobalContext 添加任何您想要的属性。我使用此上下文来存储进程 ID,如下所示:

log4net.GlobalContext.Properties["pid"] = Process.GetCurrentProcess().Id;

然后,您使用常规模式从附加程序引用此属性,如下所示:

<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %property{pid} %level %logger - %message%newline" />
</layout>

您可以添加任意数量的属性,但由于其全局性,它最适合在应用程序执行期间不会更改的属性。

关于log4net进程id信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2075603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com