默认的log4j MDC值

7

有人知道如何在使用log4j的配置xml时为MDC中缺失的条目指定默认值吗?我在我的XML文件中定义了一个appender,如下所示:

<appender name="DBAppender" class="org.apache.log4j.jdbc.JDBCAppender"> 
    <param name="URL" value="jdbc:sqlserver://phenom\\MSSQLSERVER_2012\;databaseName=pickmax_express" /> 
    <param name="Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
    <param name="User" value="user" /> 
    <param name="Password" value="password" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" 
          value="INSERT INTO LOG (source, message, order_id, log_level) VALUES ( 'TESTSOURCE','%m', %X{orderID}, 0)" 
        /> 
    </layout> 
</appender> 

需要翻译的内容是:所涉及的部分是MDC中的订单ID(%X{orderID})。我搜索了一下,只找到了重复的同一主题,大致意思是$${orderID:-DefaultValue},但在这种情况下不起作用。当日志消息在不会有订单ID的上下文中接收时,我需要将值默认为0或-1或其他标记值。

2个回答

3

如果您在Java代码中访问MDC对象,您可以通过在某些启动区域(例如servlet init()方法)添加以下内容来初始化orderId的值:

import org.apache.log4j.MDC;

public void blammyStartupMethod()
{
    MDC.put("orderId", "sentinal value");
}

编辑:看起来您需要在每次编写没有orderId值的日志消息以及每次MDC.remove()之后设置此默认值。AOP似乎是一个不错的选择。


谢谢你。虽然这不能解决我的问题,但在尝试过程中我对MDC有了更深入的了解,所以加一分。 - Mark W

0

同时,您可以在布局模式中定义默认值,例如 %X{orderID:-默认值}

<param name="ConversionPattern" 
          value="INSERT INTO LOG (source, message, order_id, log_level) VALUES ( 'TESTSOURCE','%m', %X{orderID:-Def value}, 0)" 
        />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接