java - 使用 Log4j 登录数据库

标签 java logging log4j

我正在使用 log4j 的 JDBCAppender 将应用程序的日志记录到数据库中。 在某些时候,我得到“MySQLSyntaxErrorException”,我正试图找出原因。

这是我的 log4j.properties 文件;

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.URL=jdbc:mysql://.../...
log4j.appender.DB.driver=com.mysql.jdbc.Driver
log4j.appender.DB.user=...
log4j.appender.DB.password=...
log4j.appender.DB.sql=INSERT INTO logs (EventDate,Level,Logger,Location,Message) VALUES( '%d{yyyy-MM-dd HH:mm:ss.SSS}', '%p' , '%c' ,'Test', '%m')
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

这是我的 table ;

enter image description here

当我运行我的项目时,出现以下错误;

log4j:ERROR Failed to excute sql com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''.

如果我将“%m”参数更改为其他任何内容,则不会发生异常并且日志会成功插入到数据库中。所以,我认为问题出在此处的消息本身,但我无法找出是哪条消息导致的,因为这是一个真正的大项目。

有什么方法可以让我看到实际的 SQL 语句? 或者还有什么我可以做的来调试它吗?

最佳答案

当日志消息 %m 本身包含 ' 字符时,可能会发生这种情况。 您是否尝试替换 '

INSERT INTO logs (EventDate,Level,Logger,Location,Message) VALUES( 'date_here', 'INFO' , 'com.test.Test' ,'loc', REPLACE('%m','\'','') );

关于java - 使用 Log4j 登录数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53554193/

相关文章:

java - 将日期和时间设置为局部变量 - Android

java - 属性 java.runtime.version 和 java.version 有什么区别

Python日志分析工具/库

python - 如何中断事件信息以进行记录

function - 基本 Powershell 日志记录

java - 将本地机器名放入 mySQL 表中

java - 构建时找不到slf4j LoggerBinder

java - 如何在 Logback 中以编程方式滚动日志文件

java - 如何验证 int 的前导零?

java - 如何确定使用 Spring Logging 扫描哪些包