【发布时间】:2010-01-16 00:16:11
【问题描述】:
我正在尝试创建一个涉及多台机器上的多个进程的日志记录解决方案。我计划使用 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>
但我不确定是否或如何混合和匹配两者(或者即使这是这样做的规范方式)。
所以,我的问题是:
PatternString 和 PatternLayout 有什么区别?为什么两者都有?
-
我在 PatternString 中看到 %processid,如何在 PatternLayout 中得到相同的值?这是我的测试布局:
<layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] [%property{log4net:HostName}] %-5level %logger - %message%newline" /> </layout> 最后,为 UDP appender 使用 XML 布局是有意义的。看起来 XmlLayoutSchemaLog4j 已经将 HostNameProperty 添加到 XML 消息中。如果我不想将这个新的进程 ID(可能还有进程名称)添加到 XML 消息中,那么最好的方法是什么?我是否应该复制 src\Layouts\XmlLayoutSchemaLog4j.cs,对其进行修改,然后让 log4net 知道我创建了这个新布局(如 SampleLayoutsApp)?
感谢您的帮助
【问题讨论】:
标签: log4net