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