我正在使用 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 ;
当我运行我的项目时,出现以下错误;
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/