Ни одно из предложенных решений не работает для меня. Я пишу это, чтобы все знали, в каком я отчаянии.
Андреа
Ответы:
131
Настройка
datasource {
...
logSql = true
}
в DataSource.groovy (согласно этим инструкциям) было достаточно, чтобы заставить его работать в моей среде. Похоже, что некоторые части FAQ устарели (например, вопрос «столбцы« многие ко многим назад »»), так что это также может быть что-то, что за это время изменилось.
logSql=trueодного недостаточно. Также необходимо включить ведение журнала гибернации. См. Ответ @ Pete.
Джейсон
2
Я заметил, что это не включает значения, которые входят в операторы SQL, где есть "?".
Джейсон
1
Это работает, но для всех запросов. Можно ли также распечатать сгенерированный sql для определенных критериев без необходимости устанавливать logSql = true?
августа
@Guus, как я могу распечатать сгенерированный sql для определенных критериев?
biniam
@biniam_Ethiopia Насколько я знаю, это невозможно. Я хочу этого, так как это раздражает из-за отладки определенных классов и нежелания видеть другие запросы.
августа
91
Я считаю более полезным сделать следующее, а именно включить ведение журнала Hibernate для регистрации SQL вместе с переменными привязки (чтобы вы могли видеть значения, переданные в ваши вызовы, и легко реплицировать SQL в вашем редакторе или иным образом).
В ваших Config.groovy, добавьте следующую строку в ваш log4j блока:
log4j = {
// Enable Hibernate SQL logging with param valuestrace'org.hibernate.type'
debug 'org.hibernate.SQL'
//the rest of your logging config
// ...
}
Я использовал это много раз. Одно замечание: вывод параметров очень дорого обходится. Я бы порекомендовал делать это только на вашем компьютере разработчика.
Джон Гордон
2
Вы также можете добавить format_sql = trueв свой hibernateблок DataSource.groovyдля хорошо отформатированного вывода.
Грегор Петрин
1
Примечание. При этом будут регистрироваться как параметры предложения where, так и значения столбцов, извлеченные из наборов результатов запроса. Чтобы регистрировать только параметры предложения, используйтеtrace 'org.hibernate.type.BasicBinder'
GreenGiant
Кто-нибудь знает эквивалент grails 3.3.8?
Джон Литтл
По какой-то причине синтаксически неверные запросы (сгенерированные самим Hibernate, к сожалению!) Не регистрируются - все остальные запросы регистрируются ... Возможно, проблема с самим Hibernate?
Это позволяет избежать проблем с производительностью, связанных с ведением журнала трассировки typeпакета Hibernate . Это работает с Hibernate 3.6 и выше. Я получил это от: https://burtbeckwith.com/blog/?p=1604
Решение предназначено только для разработки, а не для производства.
Все приведенные выше ответы работают и верны. Но они не показывают полный запрос в удобной для восприятия человеком форме. Если вы хотите увидеть последний (без?,?) Запрос, у вас есть два варианта.
A) проксируйте свое соединение jdbc с помощью log4jdbc или p6Spy.
Б) посмотрите на это на уровне базы данных. Например, очень легко сделать с mysql.
Узнайте, где находится ваш файл general_log_file. Активный общий журнал, если он еще не активирован.
mysql command line> showvariableslike"%general_log%";
mysql command line> setglobal general_log = true;
Теперь все записано в файл журнала. Пример Mac / Linux, чтобы показать хороший поток ваших запросов.
Чисто только для справки, но я использую p6spy для регистрации SQL-запросов. Это небольшой промежуточный драйвер jdbc. Точный запрос регистрируется так, как если бы он был отправлен на сервер (с включенными параметрами).
включите это в свой проект:
runtime 'p6spy:p6spy:3.0.0'
Измените драйвер источника данных:
driverClassName: com.p6spy.engine.spy.P6SpyDriver
И ваш URL-адрес jdbc:
url: jdbc:p6spy:mysql://
Настройте его с помощью spy.properties (в grails-app / conf).
Я знаю, что этот вопрос был задан и ответил на него давно. Но я случайно увидел этот вопрос и не мог удержаться, чтобы ответить или поделиться нашим подходом к реализации журнала sql в нашем проекте. Надеюсь, это поможет.
В настоящее время он находится в среде разработки. Мы используем «log4jdbc Driver Spy» для регистрации sql.
Конфигурация:
В вашем BuildConfig.groovy: добавьте ниже зависимости:
По моему личному опыту, я нашел его весьма полезным и полезным при отладке. Также дополнительную информацию вы можете найти на этом сайте. https://code.google.com/p/log4jdbc-remix/
Это вариант многих из вышеперечисленных решений, но он позволяет настраивать значение во время выполнения. И точно так же, как другие решения, которые имеют дело с logToStdoutэтим, показывают только запросы, а не значения привязки.
Идея была украдена из поста, который я прочитал несколько лет назад, но не могу найти прямо сейчас. Он отредактирован для работы с grails 3.3.
Аналогичный метод можно использовать для включения ведения журнала для конкретных интеграционных тестов:
Ответы:
Настройка
в DataSource.groovy (согласно этим инструкциям) было достаточно, чтобы заставить его работать в моей среде. Похоже, что некоторые части FAQ устарели (например, вопрос «столбцы« многие ко многим назад »»), так что это также может быть что-то, что за это время изменилось.
источник
logSql=true
одного недостаточно. Также необходимо включить ведение журнала гибернации. См. Ответ @ Pete.Я считаю более полезным сделать следующее, а именно включить ведение журнала Hibernate для регистрации SQL вместе с переменными привязки (чтобы вы могли видеть значения, переданные в ваши вызовы, и легко реплицировать SQL в вашем редакторе или иным образом).
В ваших
Config.groovy
, добавьте следующую строку в ваш log4j блока:log4j = { // Enable Hibernate SQL logging with param values trace 'org.hibernate.type' debug 'org.hibernate.SQL' //the rest of your logging config // ... }
источник
format_sql = true
в свойhibernate
блокDataSource.groovy
для хорошо отформатированного вывода.trace 'org.hibernate.type.BasicBinder'
Для grails 3. *
Вариант №1 добавить в logback.groovy следующее:
или
Вариант № 2: добавьте следующее в dataSource в application.yml. Однако этот подход не регистрирует значения параметров.
источник
Попробуй это:
Это позволяет избежать проблем с производительностью, связанных с ведением журнала трассировки
type
пакета Hibernate . Это работает с Hibernate 3.6 и выше. Я получил это от: https://burtbeckwith.com/blog/?p=1604источник
Решение предназначено только для разработки, а не для производства.
Все приведенные выше ответы работают и верны. Но они не показывают полный запрос в удобной для восприятия человеком форме. Если вы хотите увидеть последний (без?,?) Запрос, у вас есть два варианта.
A) проксируйте свое соединение jdbc с помощью log4jdbc или p6Spy.
Б) посмотрите на это на уровне базы данных. Например, очень легко сделать с mysql.
Узнайте, где находится ваш файл general_log_file. Активный общий журнал, если он еще не активирован.
mysql command line> show variables like "%general_log%"; mysql command line> set global general_log = true;
Теперь все записано в файл журнала. Пример Mac / Linux, чтобы показать хороший поток ваших запросов.
источник
Чисто только для справки, но я использую p6spy для регистрации SQL-запросов. Это небольшой промежуточный драйвер jdbc. Точный запрос регистрируется так, как если бы он был отправлен на сервер (с включенными параметрами).
включите это в свой проект:
Измените драйвер источника данных:
И ваш URL-адрес jdbc:
Настройте его с помощью spy.properties (в grails-app / conf).
Не забудьте отключить это для производства!
источник
Далее у меня работает:
grails-app / conf / application.yml
# ... hibernate: format_sql: true # <<<<<<< ADD THIS <<<<<<< cache: queries: false use_second_level_cache: true # ... environments: development: dataSource: logSql: true // <<<<<<< ADD THIS <<<<<<< dbCreate: create-drop url: jdbc:h2:mem:... # ...
grails-app / conf / logback.groovy
// ... appender('STDOUT', ConsoleAppender) { encoder(PatternLayoutEncoder) { pattern = "%level %logger - %msg%n" } } // >>>>>>> ADD IT >>>>>>> logger 'org.hibernate.type.descriptor.sql.BasicBinder', TRACE, ['STDOUT'] logger 'org.hibernate.SQL', TRACE, ['STDOUT'] // <<<<<<< ADD IT <<<<<<< root(ERROR, ['STDOUT']) def targetDir = BuildSettings.TARGET_DIR // ...
Источник: http://sergiodelamo.es/log-sql-grails-3-app/
источник
Я знаю, что этот вопрос был задан и ответил на него давно. Но я случайно увидел этот вопрос и не мог удержаться, чтобы ответить или поделиться нашим подходом к реализации журнала sql в нашем проекте. Надеюсь, это поможет.
В настоящее время он находится в среде разработки. Мы используем «log4jdbc Driver Spy» для регистрации sql.
Конфигурация:
В вашем BuildConfig.groovy: добавьте ниже зависимости:
И в вашем источнике данных или другой связанной конфигурации: [где бы вы не определили конфигурацию, связанную с источником данных], добавьте:
По моему личному опыту, я нашел его весьма полезным и полезным при отладке. Также дополнительную информацию вы можете найти на этом сайте. https://code.google.com/p/log4jdbc-remix/
С уважением
источник
Для конкретного блока кода мы также можем создать метод, принимающий закрытие. например.
источник
Если у вас установлен плагин консоли , вы можете получить ведение журнала sql с помощью этого небольшого фрагмента кода.
Это вариант многих из вышеперечисленных решений, но он позволяет настраивать значение во время выполнения. И точно так же, как другие решения, которые имеют дело с
logToStdout
этим, показывают только запросы, а не значения привязки.Идея была украдена из поста, который я прочитал несколько лет назад, но не могу найти прямо сейчас. Он отредактирован для работы с grails 3.3.
Аналогичный метод можно использовать для включения ведения журнала для конкретных интеграционных тестов:
Это включит ведение журнала sql только для тестов в этом одном файле.
источник