Turning off hibernate logging console output

JavaHibernateLogging

Java Problem Overview


I'm using hibernate 3 and want to stop it from dumping all the startup messages to the console. I tried commenting out the stdout lines in log4j.properties but no luck. I've pasted my log file below. Also I'm using eclipse with the standard project structure and have a copy of log4j.properties in both the root of the project folder and the bin folder.

### direct log messages to 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

direct messages to file 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

set log levels - for more verbose logging change 'info' to 'debug'

log4j.rootLogger=warn, stdout

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

log HQL query parser activity

#log4j.logger.org.hibernate.hql.ast.AST=debug

log just the SQL

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

log JDBC bind parameters

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

log schema export/update

log4j.logger.org.hibernate.tool.hbm2ddl=debug

log HQL parse trees

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

log cache activity

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

log transaction activity

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

log JDBC resource acquisition

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

enable the following line if you want to track down connection
leakages when using DriverManagerConnectionProvider

#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trac5

Java Solutions


Solution 1 - Java

Important notice: the property (part of hibernate configuration, NOT part of logging framework config!)

hibernate.show_sql

controls the logging directly to STDOUT bypassing any logging framework (which you can recognize by the missing output formatting of the messages). If you use a logging framework like log4j, you should always set that property to false because it gives you no benefit at all.

That circumstance irritated me quite a long time because I never really cared about it until I tried to write some benchmark regarding Hibernate.

Solution 2 - Java

Try to set more reasonable logging level. Setting logging level to info means that only log event at info or higher level (warn, error and fatal) are logged, that is debug logging events are ignored.

log4j.logger.org.hibernate=info

or in http://wiki.apache.org/logging-log4j/Log4jXmlFormat">XML version of log4j config file:

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

See also http://logging.apache.org/log4j/1.2/manual.html">log4j manual.

Solution 3 - Java

Executing:

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

before hibernate's initialization worked for me.


Note: the line above will turn every logging off (Level.OFF). If you want to be less strict, you can use

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

that is silent enough. (Or check the java.util.logging.Level class for more levels).

Solution 4 - Java

You can disabled the many of the outputs of hibernate setting this props of hibernate (hb configuration) a false:

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

But if you want to disable all console info you must to set the logger level a NONE of FATAL of class org.hibernate like Juha say.

Solution 5 - Java

I finally figured out, it's because the Hibernate is using slf4j log facade now, to bridge to log4j, you need to put log4j and slf4j-log4j12 jars to your lib and then the log4j properties will take control Hibernate logs.

My pom.xml setting looks as below:

	<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>

Solution 6 - Java

For disabling Hibernate:select message in log, it is possible to set the property into HibernateJpaVendorAdapter:

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

Solution 7 - Java

For those who don't want elegant solutions, just a quick and dirty way to stop those messages, here is a solution that worked for me (I use Hibernate 4.3.6 and Eclipse and no answers provided above (or found on the internet) worked; neither log4j config files nor setting the logging level programatically)

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

    ...
}

I used it in a tutorial program downloaded from this site

Solution 8 - Java

The first thing to do is to figure out which logging framework is actually used.

Many frameworks are already covered by other authors above. In case you are using Logback you can solve the problem by adding this logback.xml to your classpath:

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

Further information: Logback Manual-Configuration

Solution 9 - Java

To disable printing hibernate queries in logs, just add this to your application.properties

spring.jpa.show-sql=false

Solution 10 - Java

I changed the "debug" to "info" and it worked. Here is what I did:

Before:

log4j.rootLogger=debug, stdout, R

After:

log4j.rootLogger=info, stdout, R 

Solution 11 - Java

There are several parts of hibernate logging you can control based on the logger hierarchy of the hibernate package (more on logger hierarchy here).

    <!-- 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>

The above was taken from here.

Additionally you could have the property show-sql:true in your configuration file since that supersedes the logging framework settings. More on that here.

Solution 12 - Java

I managed to stop by adding those 2 lines

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

log4j.logger.org.hibernate=error

Bellow is what my log4j.properties looks like, i just leave some commented lines explaining the log level

# 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

Solution 13 - Java

Replace slf4j-jdk14-xxx.jar with slf4j-log4j12-xxx.jar. If you have both, delete slf4j-jdk14-xxx.jar. Found this solution at https://forum.hibernate.org/viewtopic.php?f=1&t=999623

Solution 14 - Java

To get rid of logger output in console try this.

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

loggerContext.stop();

These statements disabled all the console outputs from logger.

Solution 15 - Java

In my case I had added the dependency

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.5.6.Final</version>
    </dependency>

which was not necessary. I removed it and everything works perfectly

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJaredView Question on Stackoverflow
Solution 1 - Javauser1050755View Answer on Stackoverflow
Solution 2 - JavaJuha SyrjäläView Answer on Stackoverflow
Solution 3 - JavaacdcjuniorView Answer on Stackoverflow
Solution 4 - JavarresinoView Answer on Stackoverflow
Solution 5 - JavaLiqun ChenView Answer on Stackoverflow
Solution 6 - JavaSystfileView Answer on Stackoverflow
Solution 7 - JavaMatej VargovĨíkView Answer on Stackoverflow
Solution 8 - JavaChristian HoffmannView Answer on Stackoverflow
Solution 9 - JavaPramod H GView Answer on Stackoverflow
Solution 10 - Javauser370677View Answer on Stackoverflow
Solution 11 - JavaChris MeyerView Answer on Stackoverflow
Solution 12 - JavaPhilippeView Answer on Stackoverflow
Solution 13 - JavaBalakrishnaView Answer on Stackoverflow
Solution 14 - JavaRamesh GowthamView Answer on Stackoverflow
Solution 15 - JavaRonald CoariteView Answer on Stackoverflow