Вход в базу данных с Log4j - PullRequest
       7

Вход в базу данных с Log4j

0 голосов
/ 30 ноября 2018

Я регистрирую журналы моего приложения в базе данных, используя JDBCAppender из log4j.В какой-то момент я получаю «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: ОШИБКА не удалось выполнитьsql com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: у вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ''.

Если я изменю параметр "% m" на что-то еще, исключение не происходит, и журналвставлен в БД успешно.Итак, я думаю, что проблема с самим сообщением здесь, но я не могу выяснить, какое сообщение вызывает его, так как это очень большой проект.

Есть ли какой-нибудь способ, которым я могу увидеть фактический оператор SQL?Или я могу еще что-нибудь сделать для отладки?

1 Ответ

0 голосов
/ 30 ноября 2018

Это может произойти, если сообщение журнала %m само содержит символ '.Вы пытались заменить '

INSERT INTO logs (EventDate,Level,Logger,Location,Message) VALUES( 'date_here', 'INFO' , 'com.test.Test' ,'loc', REPLACE('%m','\'','') );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...