2013-07-30 2 views
1

Я работаю над SQL Logger для своего веб-приложения. Я хочу, чтобы иметь возможность регистрировать SQL-запрос, который запускается пользовательским взаимодействием с графическим интерфейсом. Я работаю в среде Spring, работая с maven и mybatis. Я упаковываю свой webapp в войну и развертываю ее на tomcat.Журнал SQL, который передается с базой данных

Я хочу иметь возможность напрямую использовать SQL для доступа к базе данных. Я могу попробовать использовать SocketAppender/HTMLAppender, как в Log4j, и размещать запросы, чтобы другие люди, не являющиеся SQL, могли использовать его напрямую без его редактирования или удаления мусора из запросов, чтобы просмотреть заполненные данные.

Я столкнулся с несколькими инструментами Logger, которые могут записывать SQL.

  1. jdbcdslog-ехр
  2. P6Spy
  3. JdbcProxy
  4. log4jdbc
  5. SqlRecorder

То, что я специально искал:

  1. Чистых запросов SQL без почти (например, время, в которое был запущен запрос jdbcdslog-exp recorded data)
  2. Если я получаю немного нежелательных данных, я хочу, чтобы их можно было удалить, чтобы генерировать чистые запросы. Я пытаюсь понять, как это работает jdbcdslog, но с трудом пытается заставить его работать.
  3. Я хочу знать, может ли какой-либо из вышеперечисленных инструментов предоставить нам некоторые метаданные о запросах (например, какой пакет принадлежал запросу), так что я могу выделить данные журнала в соответствии с пакетами.

ответ

1

Я использую jdbcdslog-exp для таких случаев.

добавить jdbcdslog-1.0.6.2.jar в classpath.

добавить категории для LOG4J конфигурации (установить INFO для ResultSetLogger тоже, если вы хотите - остерегайтесь OutOfMemory)

<category name="org.jdbcdslog.StatementLogger"> 
    <priority value="INFO"/> 
</category> 
<category name="org.jdbcdslog.ResultSetLogger"> 
    <priority value="FATAL"/> 
</category> 

, если вам нужно переключить протоколирование заявление, посредством выполнения вы можете начать свой log4j с

PropertyConfigurator.configureAndWatch("log4j.xml", 60000); 

изменить параметры соединения JDBC (здесь пример HSQL в JBoss)

из

<connection-url>jdbc:hsqldb:hsql://localhost:1801</connection-url> 
<driver-class>org.hsqldb.jdbcDriver</driver-class> 

в

<connection-url>jdbc:jdbcdslog:hsqldb:hsql://localhost:1801;targetDriver=org.hsqldb.jdbcDriver</connection-url> 
<driver-class>org.jdbcdslog.DriverLoggingProxy</driver-class> 
+0

Спасибо за ваш ответ. Есть ли способ, с помощью которого я могу получить класс, из которого был запущен запрос. Существует параметр% C, который можно использовать с шаблоном шаблона Log4j, который может дать нам класс, из которого был запущен запрос, но он не дает мне необходимый класс при использовании с jdbcdslog. – ProgrammingPanda

+0

в [code.google.com/p/jdbcdslog/wiki/UserGuide](http://code.google.com/p/jdbcdslog/wiki/UserGuide), вы можете найти в разделе _Создание параметров_параметр ** jdbcdslog.printStackTrace * *.В stackTrace вы можете найти класс и метод вызова. –

+0

M, я хочу иметь возможность получить доступ к этой информации. Как и в случае метаданных запроса. проблема здесь http://stackoverflow.com/questions/17954848/get-the-name-of-the-package-from-which-a-sql-query-was-fired – ProgrammingPanda