我正在使用Log4Net和AdoNetAppender将消息从简单的系统托盘应用程序记录到SQL Server 2005数据库中.
我想记录机器名称和日志消息,因为这个应用程序将在多台机器上运行,我需要知道消息来自哪一个.
但是,我找不到通过我使用appender的log4net.Layout.PatternLayout公开这些信息的方法.
有没有办法以这种方式通过log4net记录机器名称?
我正在尝试创建一个涉及多台计算机上的多个进程的日志记录解决方案.我计划使用UDPAppender将所有日志消息发送到管理它们的单个机器.我有一些关于patterntrings和patternlayouts的问题.
因为我需要知道哪个机器以及该日志消息来自哪个进程,所以我也希望将其包含在日志中.我找到了主机名的%property {log4net:HostName},效果很好.但是,我在PatternLayouts中没有看到任何进程ID.当然,我在PatternString中看到类似的东西.来自FAQ:
<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>
Run Code Online (Sandbox Code Playgroud)
但我不确定是否或如何混合和匹配这两者(或者即使这是规范的方式).
所以,我的问题是:
PatternString和PatternLayout有什么区别?为什么两者都有?
我在PatternString中看到%processid,我如何在PatternLayout中获得相同的内容?这是我的测试布局:
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] [%property{log4net:HostName}] %-5level %logger - %message%newline" />
</layout>
Run Code Online (Sandbox Code Playgroud)最后,将UDP布局用于UDP appender是有意义的.看起来XmlLayoutSchemaLog4j已经将HostNameProperty添加到XML消息中.如果我不想将这个新的进程ID(可能是进程名称)添加到XML消息中,那么最好的方法是什么?我应该只复制src\Layouts\XmlLayoutSchemaLog4j.cs,修改它,让log4net知道我创建了这个新的布局(比如SampleLayoutsApp)?
谢谢你的帮助