默认log4j MDC值

Mar*_*k W 6 java log4j mdc

有没有人知道如何使用log4j的config 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> 
Run Code Online (Sandbox Code Playgroud)

有问题的部分是来自MDC的订单ID(%X {orderID}).我四处搜索,只发现同一个线程的副本说了一些类似于$$ {orderID:-DefaultValue}的内容,但这在这个上下文中不起作用.我需要能够在没有订单ID的上下文中收到日志消息时将值默认为0或-1或其他一些sentinal值

DwB*_*DwB 3

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

import org.apache.log4j.MDC;

public void blammyStartupMethod()
{
    MDC.put("orderId", "sentinal value");
}
Run Code Online (Sandbox Code Playgroud)

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