Я не могу настроить его на создание отдельных файлов для журналов hibernate.SQL
через ответ @ Daniel. Но так как моей команде нужно записывать запросы, начинающиеся завтра, я решил вместо этого просто вручную извлечь необходимые журналы из catalina.out
.
Сначала включите запись SQL
операторов вашего приложения Grails перед созданием войны
log4j.main = {
...
debug 'org.hibernate.SQL'
...
}
Приложение зарегистрирует все операторы SQL
в catalina.out
, что, кстати, приведет к тому, что файл станет слишком большим. Теперь нам нужно запланировать задачу cron на каждое начало дня, чтобы извлечь операторы предыдущего дня и скомпилировать их в отдельный ежедневный файл.
cat catalina.out | grep "$(date -d "yesterday 13:00" '+%Y-%m-%d').*DEBUG hibernate.SQL" | cut -d " " -f 8- | sort | uniq | sed 's/$/;\n/' > "hibernate.$(date -d "yesterday 13:00" '+%Y-%m-%d').log"
Beakdown скрипта bash выглядит следующим образом:
cat catalina.out
Получить исходный файл.
grep "$(date -d "yesterday 13:00" '+%Y-%m-%d').*DEBUG hibernate.SQL"
Фильтрация только тех строк, которые начинаются со вчерашней даты (которые вы проходите через эту часть: $(date -d "yesterday 13:00" '+%Y-%m-%d')
), и где строка DEBUG hibernate.SQL
находится где-то между строкой.
cut -d " " -f 8-
Удалить первую часть строки YYYY-MM-dd HH:mm:ss,xxx [http-bio-xxx.xxx.xxx.xxx-xx-exec-x] DEBUG hibernate.SQL -
. Наша линия должна немедленно начинаться с SELECT
, UPDATE
или DELETE
.
sort
Сортировка строки по алфавиту (необязательно) .
uniq
Удалить повторяющиеся строки (необязательно) .
sed 's/$/;\n/'
добавьте точку с запятой и новую строку в конце каждой строки.
> "hibernate.$(date -d "yesterday 13:00" '+%Y-%m-%d').log"
Сохранить вывод в новый файл hibernate.YYYY-MM-dd.log
.
Я предпочитаю не использовать это "хакерское" решение, если бы не срочность, в конце концов, нам нужно решение к завтрашнему дню. Если кто-то все еще может предоставить правильный способ настройки этого с помощью log4j
, Grails Config.groovy
или Tomcat, будет очень признателен.