使用Log4j登录数据库

时间:2018-11-30 08:53:42

标签: 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

这是我的桌子;

enter image description here

我在运行项目时遇到以下错误;

  

log4j:ERROR无法执行sql   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以在''附近使用正确的语法。

如果我用其他任何方式更改'%m'参数,都不会发生异常,并且日志已成功插入到DB中。因此,我认为问题出在这里的消息本身,但是由于这是一个巨大的项目,所以我无法确定是哪条消息导致了该消息。

有什么办法可以查看实际的SQL语句? 还是我可以做些其他的事情来调试更多?

1 个答案:

答案 0 :(得分:1)

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

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