web-dev-qa-db-ja.com

疑問符の代わりに値を使用してクエリを表示するために、log4jプロパティファイルを休止状態に含めます

以下のようなcreartelog4j.propertiesファイルがあります:

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.Apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.Apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

誰かがhibernate.cfg.xmlファイルに含める方法を教えてくれませんか? log4jがどのように動作するのか実際にはわかりません。これを作成して、?の代わりにvalueを使用して休止状態クエリを表示しますが、?は何も変更されないので、何を続行する必要がありますか?

ここから参照しました Hibernate show real SQL

16
commit

Hibernate.cfg.xmlの「show_sql」プロパティにより、クエリが直接コンソールに出力されます。

Log4jを使用すると、コンソール、ファイル、ネットワークポート、データベースなど、どこにでも出力を記録できます。しかし、あなたが持っている単純な構成は、コンソールにも印刷することになっています。したがって、まずshow_sqlプロパティを削除して、Log4jがコンソールに何かを表示するかどうかを確認します。

これが機能しない場合は、Log4jが正しく構成されていないことを示しています。 hibernate> 3.5を使用している場合は、slf4j apiを使用します。これは、デフォルトでlog4jではなくlogbackを使用します。クラスパスからlogback jarを削除し、代わりにslf4j-log4j12.jarとlog4j.jarを追加することで、簡単にlog4jに切り替えることができます。

Log4jトレースでは、「?」を使用してクエリも出力されますが、パラメータバインディング、つまり「?」データベースドライバまたはサーバーに置き換えられます。

13
GreyFairer

バージョンごとにhibernateリファレンスを参照してください。こちらが3.3 Link

編集:-

  1. ロギングをセットアップするには、優先バインディング用のjarファイル(Log4Jの場合はslf4j-log4j12.jar)とともにクラスパスにslf4j-api.jarが必要です。
  2. Log4j.propertiesファイルをクラスパスに配置します。プロパティファイルの例は、Hibernateとともにsrc /ディレクトリに配布されています。
  3. 次のログ4jカテゴリを有効にします。

    org.hibernate.SQL   Log all SQL DML statements as they are executed
    
    org.hibernate.type  Log all JDBC parameters
    
3
bsingh

ほとんどの場合、アプリケーションのクラスパスにlog4j.propertiesを含めることで十分です。

log4jを適切に初期化する方法は? を参照してください。

問題のリンクはすでに suggests であり、次のような個別のログステートメントでsqlテキストではなく、バインドされたsql param値を探す必要があります:TRACE [BasicBinder] binding parameter [1] as [VARCHAR] - john doe

しかし、私は log4jdbc を使用することをお勧めします。使い方はいたって簡単です。そして、それは印刷されたSQLテキストでクエリparam値をインライン化することができます。

2
Vadzim

これも追加

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

あなたの問題は修正されます。

2
jdev

値をインラインで印刷することはできません。 Hibernateは常に?クエリを記録するとき。 DEBUGレベルでのorg.hibernate.typeロギングの出力は、それらの疑問符を置き換えるために使用される値とタイプを示します。

0
Coffee Monkey

Hibernate.cfg.xmlを追加する必要はありません。クラスパスに配置して、このリンクに記載されている手順に従ってください。このリンクを参照してください:- http://makecodeeasy.blogspot.in/2013/03/logger-in-spring-web-application.html

0
Rahul Jain

私の場合、はhibernate.cfg.xmlではなく、log4j.xml@jdevで指定されたコードを配置するファイル

<property name = "show_sql">trueSQLクエリを表示します

<property name = "format_sql">trueコンソールに表示されるクエリをフォーマットする

<property name = "use_sql_comments">trueコメントがクエリに追加されます

プロジェクトがコンソールに出力するクエリが数千ある場合は、他のクエリをfalseにします。<property name = "show_sql">true<property name = "format_sql ">false<property name =" use_sql_comments ">false

または、プロジェクトで実行したlog4j.xmlにappenderを書き込みます。ここで指定されている別のテキストファイルにすべてのSQLクエリを書き込みます。 Log4j XML構成ファイルを使用してHibernateロギングを構成しますか?

0
JavaDeveloper

私はjdbcdslogのプロキシを使用したsqlロギングがhibernateロギングよりもはるかに好きです。

データベースと通信するログSQL

0
Frank M.