Używam hibernacji 3 i chcę powstrzymać ją przed zrzucaniem wszystkich wiadomości startowych na konsolę. Próbowałem wykomentować linie stdout w log4j.properties, ale bez powodzenia. Wklejam mój plik dziennika poniżej. Używam również eclipse ze standardową strukturą projektu i mam kopię log4j.properties zarówno w katalogu głównym folderu projektu, jak iw folderze bin.
### bezpośrednie komunikaty dziennika na standardowe wyjście ### # 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 ### bezpośrednie wiadomości do pliku 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 ### ustaw poziomy dziennika - aby uzyskać bardziej szczegółowe rejestrowanie, zmień „informacje” na „debugowanie” ### log4j.rootLogger = warn, stdout # log4j.logger.org.hibernate = info log4j.logger.org.hibernate = debuguj ### log aktywność parsera zapytań HQL # log4j.logger.org.hibernate.hql.ast.AST = debug ### rejestruj tylko SQL # log4j.logger.org.hibernate.SQL = debuguj ### log Parametry wiązania JDBC ### log4j.logger.org.hibernate.type = info # log4j.logger.org.hibernate.type = debuguj ### eksport / aktualizacja schematu dziennika ### log4j.logger.org.hibernate.tool.hbm2ddl = debug ### log HQL parse drzew # log4j.logger.org.hibernate.hql = debuguj ### aktywność pamięci podręcznej dziennika ### # log4j.logger.org.hibernate.cache = debuguj ### rejestruj aktywność transakcji # log4j.logger.org.hibernate.transaction = debuguj ### log pozyskiwanie zasobów JDBC # log4j.logger.org.hibernate.jdbc = debuguj ### włącz następujący wiersz, jeśli chcesz wyśledzić połączenie ### ### wycieki podczas korzystania z DriverManagerConnectionProvider ### # log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider = trac5
Odpowiedzi:
Spróbuj ustawić bardziej rozsądny poziom rejestrowania. Ustawianie poziomu logowania do
info
środków, które tylko w dzienniku zdarzeńinfo
lub wyższy poziom (warn
,error
ifatal
) są rejestrowane, że jestdebug
rejestrowanie zdarzeń są ignorowane.lub w wersji XML pliku konfiguracyjnego log4j:
<logger name="org.hibernate"> <level value="info"/> </logger>
Zobacz także podręcznik log4j .
źródło
System.out.println()
połączeń.Ważna uwaga: właściwość (część konfiguracji hibernacji, NIE część konfiguracji struktury rejestrowania!)
kontroluje rejestrowanie bezpośrednio do STDOUT z pominięciem jakiejkolwiek struktury rejestrowania (którą można rozpoznać po brakującym formatowaniu wyjściowym komunikatów). Jeśli używasz struktury rejestrowania, takiej jak log4j, zawsze powinieneś ustawić tę właściwość na false, ponieważ nie daje to żadnych korzyści.
Ta okoliczność irytowała mnie dość długo, ponieważ nigdy nie przejmowałem się tym, dopóki nie spróbowałem napisać jakiegoś testu porównawczego dotyczącego Hibernate.
źródło
hibernate.xml
konfiguracji Hibernate (tj. ), W przeciwieństwie do mojej konfiguracji logowania. Dzięki za wskazówkę!Wykonywanie:
java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.OFF);
zanim inicjalizacja hibernacji zadziałała dla mnie.
Uwaga: powyższa linia spowoduje wyłączenie każdego logowania (
Level.OFF
). Jeśli chcesz być mniej rygorystyczny, możesz użyćjava.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);
to jest wystarczająco ciche. (Lub sprawdź
java.util.logging.Level
klasę, aby uzyskać więcej poziomów).źródło
java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);
Możesz wyłączyć wiele wyjść hibernacji, ustawiając tę właściwość hibernacji (konfiguracja HB) na fałsz:
Ale jeśli chcesz wyłączyć wszystkie informacje o konsoli, musisz ustawić poziom loggera na NONE of FATAL,
org.hibernate
jak mówi Juha.źródło
W końcu doszedłem do wniosku, że Hibernate używa teraz elewacji dziennika slf4j, aby połączyć się z log4j, musisz umieścić log4j i slf4j-log4j12 jars w swojej bibliotece, a następnie właściwości log4j przejmą kontrolę nad dziennikami Hibernate.
Moje ustawienie pom.xml wygląda jak poniżej:
<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>
źródło
-Dorg.jboss.logging.provider=slf4j
do opcji maszyny wirtualnej. Napisałem artykuł na ten temat: medium.com/@scadge/how-to-enable-hibernate-logging-dc11545efd3dW celu wyłączenia
Hibernate:select
wiadomości w logu można ustawić właściwość naHibernateJpaVendorAdapter
:<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="false"/> </bean>
źródło
Dla tych, którzy nie chcą eleganckich rozwiązań, tylko szybkiego i brudnego sposobu na zatrzymanie tych wiadomości, oto rozwiązanie, które zadziałało dla mnie (używam Hibernate 4.3.6 i Eclipse i brak odpowiedzi podanych powyżej (lub znalezionych w Internecie) działało; ani pliki konfiguracyjne log4j, ani programowe ustawianie poziomu logowania)
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 ... }
Użyłem go w samouczku pobranym z tej strony
źródło
Pierwszą rzeczą do zrobienia jest ustalenie, która platforma rejestrowania jest faktycznie używana.
Wiele ram zostało już opisanych przez innych autorów powyżej. Jeśli używasz Logback, możesz rozwiązać problem, dodając to plik logback.xml do swojej ścieżki klas:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <logger name="org.hibernate" level="WARN"/> </configuration>
Dalsze informacje: Logback ręczna konfiguracja
źródło
Zmieniłem „debugowanie” na „informacje” i zadziałało. Oto co zrobiłem:
Przed:
Po:
źródło
Zamień slf4j-jdk14-xxx.jar na slf4j-log4j12-xxx.jar. Jeśli masz oba, usuń slf4j-jdk14-xxx.jar. Znalazłem to rozwiązanie na https://forum.hibernate.org/viewtopic.php?f=1&t=999623
źródło
log4j.properties
konfiguracji;log4j.logger.org.hibernate=OFF
Aby pozbyć się danych wyjściowych rejestratora w konsoli, spróbuj tego.
Te instrukcje wyłączały wszystkie dane wyjściowe konsoli z programu rejestrującego.
źródło
Istnieje kilka części rejestrowania hibernacji, które można kontrolować w oparciu o hierarchię rejestratorów pakietu hibernacji (więcej o hierarchii rejestratorów tutaj ).
<!-- 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>
Powyższe zostało zaczerpnięte stąd .
Ponadto właściwość można umieścić
show-sql:true
w pliku konfiguracyjnym, ponieważ zastępuje ona ustawienia struktury rejestrowania. Więcej na ten temat tutaj .źródło
Udało mi się zatrzymać, dodając te 2 linie
Poniżej jest to, jak wygląda mój log4j.properties , zostawiam tylko skomentowane linie wyjaśniające poziom dziennika
# 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
źródło