休止状態のログコンソール出力をオフにする


84

hibernate 3を使用していて、すべての起動メッセージがコンソールにダンプされないようにしたい。log4j.propertiesのstdout行をコメントアウトしようとしましたが、うまくいきませんでした。以下にログファイルを貼り付けました。また、標準のプロジェクト構造でeclipseを使用しており、プロジェクトフォルダーのルートとbinフォルダーの両方にlog4j.propertiesのコピーがあります。

###ログメッセージをstdout ###に転送します
#log4j.appender.stdout = org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target = System.out
#log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern =%d {ABSOLUTE}%5p%c {1}:%L-%m%n

###メッセージをファイルhibernate.logに送信します###
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = hibernate.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern =%d {ABSOLUTE}%5p%c {1}:%L-%m%n

###ログレベルを設定します-より詳細なログを取得するには、「info」を「debug」に変更します###

log4j.rootLogger = warn、stdout

#log4j.logger.org.hibernate = info
log4j.logger.org.hibernate = debug

###ログHQLクエリパーサーアクティビティ
#log4j.logger.org.hibernate.hql.ast.AST = debug

### SQLのみをログに記録する
#log4j.logger.org.hibernate.SQL = debug

### JDBCバインドパラメータをログに記録する###
log4j.logger.org.hibernate.type = info
#log4j.logger.org.hibernate.type = debug

###ログスキーマのエクスポート/更新###
log4j.logger.org.hibernate.tool.hbm2ddl = debug

###ログHQL解析ツリー
#log4j.logger.org.hibernate.hql = debug

###ログキャッシュアクティビティ###
#log4j.logger.org.hibernate.cache = debug

###ログトランザクションアクティビティ
#log4j.logger.org.hibernate.transaction = debug

###ログJDBCリソースの取得
#log4j.logger.org.hibernate.jdbc = debug

###接続を追跡する場合は、次の行を有効にします###
### DriverManagerConnectionProvider使用時のリーク###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider = trac5

2
Hibernate4 +がJBOSSロギングを使用していることは言及する価値があります。

回答:


77

より適切なログレベルを設定してみてください。ログレベルを設定するinfoだけで、イベントログに記録手段infoまたはより高いレベルを(warnerrorfatalされている、)ログに記録されるdebugイベントのロギングは無視されます。

log4j.logger.org.hibernate=info

またはlog4j構成ファイルのXMLバージョン

<logger name="org.hibernate">
  <level value="info"/> 
</logger>

log4jのマニュアルも参照してください。


1
XMLバージョンでこれをどのように行いますか?
James McMahon

上記を実行することで、org.hibernate内のすべてのパッケージにこれを適用できます。または、hibernate内の異なるパッケージに異なるレベルが必要な場合は、それらのパッケージを同じ方法で指定できます。
Matthew Brubaker

3
これは論理的に思えますが、それでも私には機能しません(Spring 3.0.5、Hibernate 3.5.6、sf4j-log4jブリッジ)。毎回、Hibernateの起動について約100行の「INFO」コメントが表示されます。したがって、これはすべての人に役立つとは限りません。
ジョセフラスト

1
@Twisted Pear:ログレベルをWARNに設定します。その後、INFOメッセージは表示されません。
ユハSyrjälä

5
これが適切に解決されなかったためのフォローアップ:Hibernateは、4.3.0.Finalでも、ハードコードされたSystem.out.println()呼び出しが多数あります。
chrylis -cautiouslyoptimistic- 2014年

85

重要な注意:プロパティ(ログフレームワーク構成の一部ではなく、休止状態構成の一部です!)

hibernate.show_sql

ロギングフレームワーク(メッセージの出力フォーマットが欠落していることで認識できます)をバイパスして、STDOUTへのロギングを直接制御します。log4jのようなロギングフレームワークを使用する場合は、そのプロパティを常にfalseに設定があります。これは、まったくメリットがないためです。

Hibernateに関するベンチマークを書こうとするまで、私はそれを本当に気にかけなかったので、その状況は私をかなり長い間苛立たせました。


2
hibernate.xmlロギング構成ではなく、Hibernate(つまり)構成でこのプロパティを設定する必要がありました。ポインタをありがとう!
JJ Zabkar 2015

このロギングをバイパスしてロギングフレームワークを通過させるのではなく、実際に使用する方法はありますか?ログに記録したいいくつかの例外がstdoutに送信されています。
レグナ2016年

1
Springブートプロジェクトで、これをプロファイルYMLconfファイルに追加しました。しかし、このスレッドの他の投稿と同じように、機能しませんでした... Hibernateログは、私が何を指定しても書き込まれ続けます。Logback構成、アプリケーションyamlファイル、pom.xml以外の場所で処理できますか?
アレックス

33

実行中:

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.OFF);

hibernateの初期化が機能する前に。


注:上の行では、すべてのログがオフになります(Level.OFF)。厳しさを緩和したい場合は、

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);

それは十分に静かです。(または、java.util.logging.Levelクラスで他のレベルを確認してください)。


1
これは私のために働いた:java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);
RafiAlhamd

16

hibernateのこの小道具(hb構成)をfalseに設定して、hibernateの出力の多くを無効にすることができます。

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

ただし、すべてのコンソール情報を無効にする場合は、org.hibernateJuhaが言うように、ロガーレベルをクラスの致命的ではないものに設定する必要があります。


ログを作成せずに統計を生成したい場合はどうすればよいですか?
markthegrea 2014

7

私はついに理解しました。これは、Hibernateが現在slf4jログファサードを使用しているためです。log4jにブリッジするには、log4jおよびslf4j-log4j12 jarをlibに配置する必要があります。そうすると、log4jプロパティがHibernateログを制御します。

私のpom.xml設定は次のようになります。

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.4</version>
    </dependency>

実際には-Dorg.jboss.logging.provider=slf4j、VMオプションに追加することで、Hibernateにslf4jを明示的に使用させることができます。:私は、トピックに関する記事を書いたmedium.com/@scadge/how-to-enable-hibernate-logging-dc11545efd3d
Scadge

5

Hibernate:selectログ内のメッセージを無効にするために、プロパティをHibernateJpaVendorAdapter次のように設定することができます。

<bean id="jpaVendorAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="false"/>
</bean> 

4

エレガントな解決策を望まない人のために、それらのメッセージを止めるための迅速で汚い方法は、私のために働いた解決策です(私はHibernate 4.3.6とEclipseを使用していますが、上記の回答はありません(またはインターネット上にあります)動作しました; log4j構成ファイルもプログラムによるログレベルの設定もありません)

public static void main(String[] args) {
    //magical - do not touch
    @SuppressWarnings("unused")
    org.jboss.logging.Logger logger = org.jboss.logging.Logger.getLogger("org.hibernate");
    java.util.logging.Logger.getLogger("org.hibernate").setLevel(java.util.logging.Level.WARNING); //or whatever level you need

    ...
}

このサイトからダウンロードしたチュートリアルプログラムで使用しました


3

最初に行うことは、実際に使用されているロギングフレームワークを把握することです。

多くのフレームワークは、上記の他の著者によってすでにカバーされています。Logbackを使用している場合は、このlogback.xmlをクラスパスに追加することで問題を解決できます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.hibernate" level="WARN"/>
</configuration>

詳細情報:ログバックマニュアル-構成


1

「デバッグ」を「情報」に変更しましたが、機能しました。これが私がしたことです:

前:

log4j.rootLogger=debug, stdout, R

後:

log4j.rootLogger=info, stdout, R 


0

コンソールでロガー出力を取り除くには、これを試してください。

ch.qos.logback.classic.LoggerContext.LoggerContext loggerContext = (LoggerContext) org.slf4j.LoggerFactory.LoggerFactory.getILoggerFactory();

loggerContext.stop();

これらのステートメントは、ロガーからのすべてのコンソール出力を無効にしました。


0

Hibernateパッケージのロガー階層に基づいて制御できるHibernateロギングのいくつかの部分があります(ロガー階層の詳細はこちら)。

    <!-- Log everything in hibernate -->
    <Logger name="org.hibernate" level="info" additivity="false">
      <AppenderRef ref="Console" />
    </Logger>

    <!-- Log SQL statements -->
    <Logger name="org.hibernate.SQL" level="debug" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

    <!-- Log JDBC bind parameters -->
    <Logger name="org.hibernate.type.descriptor.sql" level="trace" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

上記はここから取られたものです

さらにshow-sql:true、ログフレームワークの設定に優先するため、構成ファイルにプロパティを含めることができます。詳細はこちら


0

私はそれらの2行を追加することによってなんとか停止しました

log4j.logger.org.hibernate.orm.deprecation=error

log4j.logger.org.hibernate=error

以下は私のlog4j.propertiesがどのように見えるかです、私はログレベルを説明するいくつかのコメント行を残すだけです

# Root logger option
#Level/rules TRACE < DEBUG < INFO < WARN < ERROR < FATAL.
#FATAL: shows messages at a FATAL level only
#ERROR: Shows messages classified as ERROR and FATAL
#WARNING: Shows messages classified as WARNING, ERROR, and FATAL
#INFO: Shows messages classified as INFO, WARNING, ERROR, and FATAL
#DEBUG: Shows messages classified as DEBUG, INFO, WARNING, ERROR, and FATAL
#TRACE : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#ALL : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#OFF : No log messages display


log4j.rootLogger=INFO, file, console

log4j.logger.main=DEBUG
log4j.logger.org.hibernate.orm.deprecation=error
log4j.logger.org.hibernate=error

#######################################
# Direct log messages to a log file
log4j.appender.file.Threshold=ALL
log4j.appender.file.file=logs/MyProgram.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{1} - %m%n

# set file size limit
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=50


#############################################
# Direct log messages to System Out
log4j.appender.console.Threshold=INFO
log4j.appender.console.Target=System.out
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1} - %m%n
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.