我有 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(線程上下文)的內(nèi)容。我對 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>而且它不起作用。當(dāng)我注釋掉用戶時(shí),日志存儲(chǔ)在數(shù)據(jù)庫中,但是當(dāng)它存在時(shí)我得到異常: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 數(shù)據(jù)庫存儲(chǔ)這些信息嗎?
2 回答

慕田峪7331174
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
我找到了一個(gè)解決方案: user
并且level
是 SQL 保留關(guān)鍵字,將它從user
to更改usr
為level
解決lvl
了這個(gè)問題,現(xiàn)在我在數(shù)據(jù)庫中有了日志。

慕工程0101907
TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
我猜你在每個(gè)日志上都推送了數(shù)據(jù)庫?那么當(dāng)您推送時(shí),它可能不會(huì)進(jìn)入本地線程來查找用戶 ID 值?
你是手動(dòng)推送到數(shù)據(jù)庫嗎?
添加回答
舉報(bào)
0/150
提交
取消