Значение по умолчанию log4j MDC

Кто-нибудь знает, как указать значение по умолчанию для отсутствующей записи в MDC, используя log4j config xml? У меня есть appender, определенный в моем XML-файле следующим образом:

<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 (%X{orderID}). Я искал вокруг и нашел только дубликаты одного и того же потока, которые говорили что-то вроде $${orderID:-DefaultValue}, но это не работает в этом контексте. Мне нужно иметь возможность установить значение по умолчанию 0 или -1 или какое-либо другое часовое значение при получении сообщений журнала в контекстах, которые не имеют идентификатора заказа

2 ответа

Если вы получаете доступ к объекту MDC в своем Java-коде, вы можете инициализировать значение для orderId, добавив следующее в некоторую область запуска (например, метод сервлета init()):

import org.apache.log4j.MDC;

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

Редактировать: Кажется вероятным, что вам нужно будет установить это значение по умолчанию каждый раз, когда вы пишете сообщение журнала, которое не имеет значения orderId, и после каждого MDC.remove(). АОП, кажется, вариант здесь.

Также вы можете определить значение по умолчанию в шаблоне макета, например,%X{orderID:-Def value}

<param name="ConversionPattern" 
          value="INSERT INTO LOG (source, message, order_id, log_level) VALUES ( 'TESTSOURCE','%m', %X{orderID:-Def value}, 0)" 
        />
Другие вопросы по тегам