Play 2.4 - Вывод выражения SQL Ebeans в журналах
Как отображать SQL-сообщения в журнале? Я использую EBeans, и он не может вставить по некоторым причинам, но я не вижу, в чем проблема.
Я попытался изменить свою конфигурацию на:
db.default.logStatements=true
и добавьте это в logback.xml
<logger name="com.jolbox" level="DEBUG" />
чтобы следовать некоторым ответам, которые я нашел в Интернете, но он не работает для 2.4...
Ответы
Ответ 1
Запуск журнала изменился в Play 2.4. Начиная с этого момента для отображения операторов SQL в консоли просто добавьте следующую строку в файл conf/logback.xml:
<logger name="org.avaje.ebean.SQL" level="TRACE" />
Он должен работать нормально.
Ответ 2
Из Play 2.5 протоколирование SQL-запросов очень просто, у Play 2.5 есть простой способ регистрации SQL-операторов, построенных на jdbcdslog, что работает во всех базах данных JDBC, реализациях пула соединений и каркасах сохранения (Anorm, Ebean, JPA, Slick и т.д.). Когда вы включаете ведение журнала, вы увидите, как каждый оператор SQL отправляется в вашу базу данных, а также информацию о производительности, которую должен выполнить оператор.
Функция ведения журнала SQL в Play 2.5 может быть настроена с помощью базы данных с использованием свойства logSql:
db.default.logSql=true
После этого вы можете настроить уровень журнала jdbcdslog-exp, добавив эти строки в logback.xml
:
<logger name="org.jdbcdslog.ConnectionLogger" level="OFF" /> <!-- Won' log connections -->
<logger name="org.jdbcdslog.StatementLogger" level="INFO" /> <!-- Will log all statements -->
<logger name="org.jdbcdslog.ResultSetLogger" level="OFF" /> <!-- Won' log result sets -->
Ответ 3
FYI, есть хороший видеоурок по Ebean новая страница документа, показывающая способ захвата операторов SQL только для выбранных областей кода.
Благодаря этому вы можете записывать операторы только в проблемных местах при разработке и/или использовании зарегистрированных протоколов для выполнения тестов в качестве показанных в видео.
Короче: добавьте последнюю avaje-ebeanorm-mocker зависимость от вашего built.sbt
, как обычно, поэтому позже вы можете использовать ее в своем коде, например:
LoggedSql.start();
User user = User.find.byId(123);
// ... other queries
List<String> capturedLogs = LoggedSql.stop();
Обратите внимание, что вам даже не нужно извлекать операторы List
, если вам не нужно обрабатывать их, поскольку они обычно отображаются на консоли. Поэтому вы можете использовать его так:
if (Play.isDev()) LoggedSql.start();
User user = User.find.byId(345);
// ... other queries
if (Play.isDev()) LoggedSql.stop();
Ответ 4
У меня был успех, используя jdbcdslog. Поскольку @Saeed Zarinfam упоминал здесь, Play 2.5 включает это по умолчанию.
В отличие от этого ответа, это решение отображает значения параметров вместо вопросительных знаков.
Вот шаги, которые я выполнил, чтобы заставить его работать для Play 2.4 и MySQL:
Добавить в build.sbt:
"com.googlecode.usc" % "jdbcdslog" % "1.0.6.2"
Добавить в logback.xml:
<logger name="org.jdbcdslog.StatementLogger" level="INFO" /> <!-- Will log all statements -->
Создайте файл conf/jdbcdslog.properties, содержащий:
jdbcdslog.driverName=mysql
jdbcdslog.showTime=true
Измените db.default.url(пример):
jdbc:mysql://127.0.0.1:3306/mydb
изменяется на jdbc:jdbcdslog:mysql://127.0.0.1:3306/mydb;targetDriver=com.mysql.jdbc.Driver
Измените db.default.driver:
org.jdbcdslog.DriverLoggingProxy