我很难找到关于各种“盒子里”模式的文档,比如
%logger
%level
%timestamp
当然有示例页面,但我不确定这是选项的完整列表。
我也知道可以将应用程序中的 MDC 参数传递给记录器,但这涉及代码更改,这与配置更改不同。
有没有%machineName
选择,或者machineIP
选择?问题是我们将网络场中的所有服务器都记录到同一个数据库日志中,我们现在认为来自一台机器的消息数量不成比例。
我很难找到关于各种“盒子里”模式的文档,比如
%logger
%level
%timestamp
当然有示例页面,但我不确定这是选项的完整列表。
我也知道可以将应用程序中的 MDC 参数传递给记录器,但这涉及代码更改,这与配置更改不同。
有没有%machineName
选择,或者machineIP
选择?问题是我们将网络场中的所有服务器都记录到同一个数据库日志中,我们现在认为来自一台机器的消息数量不成比例。
%property{log4net:HostName}
我刚刚偶然发现的是
<layout type="log4net.Layout.PatternLayout" value="${COMPUTERNAME}"/>
这似乎奏效了——想知道这与建议的其他选项之间有什么区别。喜欢%property{log4net:HostName}
创建一个获取机器名称的类:
using System;
using System.IO;
using log4net.Layout.Pattern;
namespace YourNameSpace.Converters
{
public class MachinePatternConverter : PatternLayoutConverter
{
protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
{
writer.Write(Environment.MachineName);
}
}
}
然后像这样设置你的 log4net 配置:
<layout type="log4net.Layout.PatternLayout">
<converter>
<name value="machine" />
<type value="YourNameSpace.MachinePatternConverter" />
</converter>
<conversionPattern value="%date [%thread] %level %logger %machine" />
</layout>
我喜欢这种方法,因为它可以重复使用,并且我可以按照自己的意愿管理信息。例如,如果您想记录 IP 地址,只需执行相同操作并创建转换器,如下所示:
public class IPPatternConverter : PatternLayoutConverter
{
protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
{
if (HttpContext.Current == null)
return;
writer.Write(HttpContext.Current.Request.UserHostAddress);
}
}
有关链接的更多信息:http: //devstuffs.wordpress.com/2012/01/12/creating-your-own-pattern-layout-converter-for-log4net/
使用这个关于添加 GlobalContext 属性的答案https://stackoverflow.com/a/2096452/1224858,我能够让它工作。
我在我的类文件中添加了以下代码:
log4net.GlobalContext.Properties["hostname"] = Environment.MachineName;
然后在配置文件中我可以引用主机名,它会出现
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{hostname}] - %message%newline" />
</layout>
希望这可以帮助。
查看PatternString API,看起来你需要在你的模式中使用 %property 。也看看这篇文章,你可能需要在应用程序启动时将机器名注入到全局上下文中。
有趣的是,我认为这是“紧凑参数语法”在这里查看最后一节http://logging.apache.org/log4net/release/manual/configuration.html