gpt4 book ai didi

java - 用于列映射的 log4j2 模式布局不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:12 25 4
gpt4 key购买 nike

我的 JDBC 附加程序的 log4j2 配置有问题。我有一个非常好的工作示例,带有简单的驱动程序管理器连接,用于快速测试。

<JDBC name="DBLogger" tableName="db_logs" ignoreExceptions="false">
<DriverManager
connectionString="jdbc:mysql://localhost:3306/twib"
userName="****"
password="****"
driverClassName="com.mysql.jdbc.Driver"
/>

<ColumnMapping name="date_time" pattern="%d{UNIX_MILLIS}" />
<ColumnMapping name="user_id" />
<ColumnMapping name="session_id" />
<ColumnMapping name="user_ip" />
<ColumnMapping name="user_agent" />
<ColumnMapping name="device_info" />
<ColumnMapping name="device_id" />
<ColumnMapping name="device_mac" />
<ColumnMapping name="device_imei" />
<ColumnMapping name="device_imsi" />
<ColumnMapping name="request_name" />
<ColumnMapping name="request_xml" />
<ColumnMapping name="response_xml" />
<MessageLayout />
</JDBC>

从java代码中我做了类似的事情:

//get logger instance
Logger dbLogger = LogManager.getLogger("DBLogger");
//create map for map message
HashMap map = new HashMap();
//fill in map with values
map.put("user_id", "...");
//...here go other map fields
map.put("response_xml", "...");
//log the map message with logger to DB
dbLogger.debug(new MapMessage(map));

一切正常,映射条目被保存到数据库中的匹配列。但是然后,我尝试另一种配置,更改

<ColumnMapping name="user_id" />

<ColumnMapping name="user_id" pattern="%K{user_id}"/>

据我从文档( JDBCAppenderPatternLayout docs )中了解到,它的工作原理类似 - 按大括号之间指定的键获取 MapMessage 的值。但这种类型的配置看起来不起作用,因为在数据库中我只在“user_id”列中收到空字符串。我在配置中打开了跟踪模式,并在日志中看到,在准备 sql 语句时,JDBCAppender 确实将空字符串作为“user_id”列的值。但我绞尽脑汁,试图理解其中的原因。特别是考虑到,最初使用 pattern="%d{UNIX_MILLIS}" 配置的“date_time”列映射接收了正确的时间戳值。

最佳答案

我自己找到了解决方案。当我开始使用 MapMessage 的特定实现时,一切都开始按预期工作,例如:

StringMapMessage map = new StringMapMessage();
map.put("user_id", "...");
//...here go other map fields
map.put("response_xml", "...");
//log the map message with logger to DB
dbLogger.debug(map);

关于java - 用于列映射的 log4j2 模式布局不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51263090/

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