为了账号安全,请及时绑定邮箱和手机立即绑定

JDBC appender 的 Log4j2 MDC 配置

JDBC appender 的 Log4j2 MDC 配置

米脂 2023-03-23 16:40:43
我有 log4j2.xml 文件:<Console name="Console" target="SYSTEM_OUT">   <PatternLayout            pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %X{userId} %-5level %logger{36}: %msg%n" /></Console>并且有%X{userId}一部分允许我显示来自 MDC(线程上下文)的内容。我对 JDBC 有类似的配置:<JDBC name="sqlServer" tableName="dbo.application_log">        <ConnectionFactory            class="mbms.configuration.Log4j2ConnectionFactory"            method="getConnection" />        <Column name="eventDate" isEventTimestamp="true" />        <Column name="level" pattern="%level" />        <Column name="logger" pattern="%logger" />        <Column name="user" pattern="%X{userId}" />        <Column name="message" pattern="%message" />        <Column name="exception" pattern="%ex{full}" /></JDBC>而且它不起作用。当我注释掉用户时,日志存储在数据库中,但是当它存在时我得到异常:Caused by: java.sql.BatchUpdateException: Incorrect syntax near the keyword 'user'.at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeBatch(SQLServerPreparedStatement.java:2065)at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:2544)at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:532)... 108 more你知道我如何使用%X{userId}MS SQL 数据库存储这些信息吗?
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

我找到了一个解决方案: user并且level是 SQL 保留关键字,将它从userto更改usrlevel解决lvl了这个问题,现在我在数据库中有了日志。



查看完整回答
反对 回复 2023-03-23
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

我猜你在每个日志上都推送了数据库?那么当您推送时,它可能不会进入本地线程来查找用户 ID 值?

你是手动推送到数据库吗?


查看完整回答
反对 回复 2023-03-23
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信