是否有machineName的log4net模式

时间:2009-06-17 14:28:50

标签: log4net pattern-layout

我很难找到关于各种'盒子'模式的文档,比如

%logger  
%level  
%timestamp  

当然有the example page但我不确定这是完整的选项列表。

我也知道MDC参数可以从应用程序输出到记录器,但这涉及代码更改,这是一个与配置更改不同的野兽。

是否有%machineName选项或machineIP选项?问题是我们将Web场中的所有服务器都登录到同一个数据库日志中,我们现在认为来自一台计算机的消息数量不成比例。

6 个答案:

答案 0 :(得分:12)

%property{log4net:HostName}

答案 1 :(得分:11)

我偶然发现的是

<layout type="log4net.Layout.PatternLayout" value="${COMPUTERNAME}"/>

这似乎正在起作用 - 想知道这和其他选项之间的区别是什么。比如%property{log4net:HostName}

答案 2 :(得分:3)

创建一个获取计算机名称的类:

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/

答案 3 :(得分:2)

查看PatternString API,看起来您需要在模式中使用%属性。另请查看this article,您可能需要在应用程序启动时将机器名称注入全局上下文。

答案 4 :(得分:2)

使用这个关于添加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>

希望这有帮助。

答案 5 :(得分:0)

有趣的是,我认为这是“紧凑参数语法”,请查看此处的最后一节http://logging.apache.org/log4net/release/manual/configuration.html