gpt4 book ai didi

java - 默认 log4j MDC 值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:09 26 4
gpt4 key购买 nike

有谁知道如何使用 log4j 的配置 xml 为 MDC 中缺失的条目指定默认值?我在我的 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 的订单 ID (%X{orderID})。我四处搜索,只发现同一个线程的副本说了一些类似 $${orderID:-DefaultValue} 的内容,但这在这种情况下不起作用。当在没有订单 ID 的上下文中收到日志消息时,我需要能够将该值默认为 0 或 -1 或其他一些重要值

最佳答案

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

import org.apache.log4j.MDC;

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

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

关于java - 默认 log4j MDC 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com