Как мне регистрировать каждое изменение БД с помощью Spring Boot в файле? - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно регистрировать каждое изменение базы данных в файл. И мне нужно показать, как данные выглядели раньше и как они выглядели.
Например, если я изменю имя человека, было бы хорошо, если бы в мой файл журнала была добавлена ​​следующая строка: " обновлена ​​таблица лиц: поле" first_name "было изменено с" Alex "на" George "(person_id = 4622 ) ».
И если я добавлю нового человека: " вставлено в таблицу персон: 'person_id' = 4623;" last_name "=" Smith ";" first_name "=" John ";" status "= 0 ".

Я делаю изменения в БД со службами, которые используют интерфейсы, расширяющие JpaRepository, и теоретически я мог бы добавить код для добавления файла журнала к каждому методу каждого сервиса. Но кода много, такой подход не следует принципам DRY, и я считаю, что должно быть лучшее решение, которое я еще не нашел. Что я должен использовать для достижения этой цели?

Я использую Spring Boot версии 2.0.3.RELEASE, и моя база данных - MariaDB.
Файл журнала может иметь любой формат, но, думаю, лучшим будет yaml.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вы можете использовать протоколирование JDBC с log4jdbc - см. Мою запись .

Чтобы заставить его работать в приложении Spring Boot, просто добавьте log4jdbc-spring-boot-starter в свой проект, когда параметры ведения журнала jdbc установлены следующим образом:

logging.level.resultsettable=info
logging.level.sqltiming=info
logging.level.sqlonly=fatal
logging.level.audit=fatal
logging.level.resultset=fatal
logging.level.connection=fatal

Затем вы получаете полные запросы SQL, время их выполнения и результаты в журнале приложения.

Чтобы вывести запросы в одну строку, вы можете использовать следующие настройки log4jdbc:

log4jdbc.dump.sql.addsemicolon=true
log4jdbc.dump.sql.maxlinelength=0
log4jdbc.trim.sql.extrablanklines=false

Тогда вы получите в своем журнале что-то вроде этого:

2018-08-27 14:36:14.183  INFO 5452 --- [127.0.0.1] jdbc.sqltiming       : SELECT 1; {executed in 1 msec}
2018-08-27 14:36:14.184  INFO 5452 --- [127.0.0.1] jdbc.resultsettable  : 
|---------|
|?column? |
|---------|
|1        |
|---------|

Также вы можете вывести эти SQL-запросы и / или их результаты в другой файл журнала. Как это сделать вы можете прочитать здесь .

0 голосов
/ 28 августа 2018

Вы можете включить show_sql и записать вывод в спящем режиме в файл , но он не из коробки предоставит вам данные, использованные в изменениях, а только форму sql. Для получения данных вам также понадобится , чтобы шпионить за драйвером jdbc .

Вы можете использовать пружинные данные для регистрации изменений в таблицах аудита. Затем из таблиц вы можете экспортировать в файлы, если хотите.

Или вы можете посмотреть, как провести одитинг на уровне БД

Это варианты, которые приходят на ум первыми.

...