我正在使用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
这是我的桌子;
我在运行项目时遇到以下错误;
log4j:ERROR无法执行sql com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以在''附近使用正确的语法。
如果我用其他任何方式更改'%m'参数,都不会发生异常,并且日志已成功插入到DB中。因此,我认为问题出在这里的消息本身,但是由于这是一个巨大的项目,所以我无法确定是哪条消息导致了该消息。
有什么办法可以查看实际的SQL语句? 还是我可以做些其他的事情来调试更多?
答案 0 :(得分:1)
当日志消息%m
本身包含'
字符时,可能会发生这种情况。
您是否尝试替换'
INSERT INTO logs (EventDate,Level,Logger,Location,Message) VALUES( 'date_here', 'INFO' , 'com.test.Test' ,'loc', REPLACE('%m','\'','') );