हाइबरनेट लॉगिंग कंसोल आउटपुट को बंद करना


84

मैं हाइबरनेट 3 का उपयोग कर रहा हूं और कंसोल के सभी स्टार्टअप संदेशों को डंप करने से रोकना चाहता हूं। मैं log4j.properties में stdout लाइनों पर टिप्पणी करने की कोशिश की, लेकिन कोई किस्मत नहीं। मैंने नीचे अपना लॉग फ़ाइल पेस्ट किया है। इसके अलावा, मैं मानक परियोजना संरचना के साथ ग्रहण का उपयोग कर रहा हूं और परियोजना फ़ोल्डर और बिन फ़ोल्डर के रूट में log4j.properties की एक प्रति है।

### स्टडआउट के लिए सीधे लॉग संदेश ###
# 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

### सेट लॉग स्तर - अधिक क्रिया लॉगिंग परिवर्तन के लिए 'जानकारी' को 'डीबग' करने के लिए ###

log4j.rootLogger = चेतावनी, stdout

# Log4j.logger.org.hibernate = जानकारी
log4j.logger.org.hibernate = डिबग

### HQL क्वेरी पार्सर गतिविधि लॉग करें
# Log4j.logger.org.hibernate.hql.ast.AST = डिबग

### बस SQL ​​लॉग इन करें
# Log4j.logger.org.hibernate.SQL = डिबग

### लॉग JDBC बाइंड मापदंडों ###
log4j.logger.org.hibernate.type = जानकारी
# Log4j.logger.org.hibernate.type = डिबग

### लॉग स्कीमा निर्यात / अद्यतन ###
log4j.logger.org.hibernate.tool.hbm2ddl = डिबग

### लॉग HQL पार्स पेड़
# Log4j.logger.org.hibernate.hql = डिबग

### लॉग कैश गतिविधि ###
# Log4j.logger.org.hibernate.cache = डिबग

### लेन-देन गतिविधि लॉग करें
# Log4j.logger.org.hibernate.transaction = डिबग

### JDBC संसाधन अधिग्रहण लॉग करें
# Log4j.logger.org.hibernate.jdbc = डिबग

### कनेक्शन को ट्रैक करना चाहते हैं तो निम्न लाइन को सक्षम करें ###
DriverManagerConnectionProvider ### का उपयोग करते समय ### रिसाव
# Log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider = trac5

2
वर्थ उल्लेख है कि Hibernate 4+ JBOSS लॉगिंग का उपयोग करता है।
आंख

जवाबों:


77

अधिक उचित लॉगिंग स्तर सेट करने का प्रयास करें। करने के लिए प्रवेश स्तर की स्थापना infoका मतलब है कि केवल पर घटना के लिए लॉग इन infoया उच्च स्तर ( warn, errorऔर fatal,) लॉग इन कर रहे है कि है debugकी घटनाओं लॉग इन करने पर ध्यान नहीं दिया जाता है।

log4j.logger.org.hibernate=info

या log4j config फ़ाइल के XML संस्करण में:

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

Log4j मैनुअल भी देखें ।


1
आप इसे XML संस्करण में कैसे करते हैं?
जेम्स मैकमोहन

आप इसे उपरोक्त सभी org.hibernate के पैकेज में लागू कर सकते हैं, या यदि आप हाइबरनेट के भीतर विभिन्न पैकेजों के लिए अलग-अलग स्तर चाहते हैं, तो आप उन पैकेजों को उसी तरह निर्दिष्ट कर सकते हैं।
मैथ्यू ब्रूकर

3
यह तर्कसंगत लगता है, लेकिन फिर भी मेरे लिए काम नहीं करता है (स्प्रिंग 3.0.5, हाइबरनेट 3.5.6, sf4j-log4x ब्रिज)। मुझे अभी भी हर बार हाइबरनेट स्टार्टअप पर 'इंफो' टिप्पणियों की लगभग 100 लाइनें मिलती हैं। तो यह हर किसी के लिए काम नहीं कर सकता है।
जोसेफ वासना

1
@Twisted नाशपाती: अपने लॉगिंग स्तर को WARN पर सेट करें। तब आपको जानकारी वाले संदेश नहीं मिलेंगे।
जूहा सिरजला 5

5
इसके बाद से फॉलोअप पर्याप्त रूप से हल नहीं किया गया था: हाइबरनेट, यहां तक ​​कि अभी भी 4.3.0.Final में, बहुत सारे हार्डकोड System.out.println()कॉल हैं।
चिर्लिस -कुट्योपोटेमिमिस्टिक-

85

महत्वपूर्ण सूचना: संपत्ति (हाइबरनेट कॉन्फ़िगरेशन का हिस्सा, लॉगिंग फ्रेमवर्क कॉन्फ़िगरेशन का हिस्सा नहीं!)

hibernate.show_sql

किसी भी लॉगिंग ढाँचे को दरकिनार कर सीधे STDOUT में लॉगिंग को नियंत्रित करता है (जिसे आप संदेशों के लापता आउटपुट स्वरूपण द्वारा पहचान सकते हैं)। यदि आप log4j जैसे लॉगिंग फ्रेमवर्क का उपयोग करते हैं, तो आपको हमेशा उस संपत्ति को गलत पर सेट करना चाहिए क्योंकि इससे आपको कोई लाभ नहीं मिलता है।

उस परिस्थिति ने मुझे काफी लंबे समय तक परेशान किया क्योंकि मैंने कभी इसके बारे में परवाह नहीं की जब तक कि मैंने हाइबरनेट के बारे में कुछ बेंचमार्क लिखने की कोशिश नहीं की।


2
मुझे इस संपत्ति hibernate.xmlको अपने लॉगिंग कॉन्फ़िगरेशन के विपरीत, अपने हाइबरनेट (यानी ) कॉन्फ़िगरेशन में सेट करना था । सूचक के लिए धन्यवाद!
जेजे ज़बकर

क्या इस लॉगिंग को मेरे लॉगिंग ढांचे को बाईपास नहीं करने का एक तरीका है लेकिन वास्तव में इसका उपयोग करना है? मैं stdout को भेजे गए कुछ अपवाद देख रहा हूं, जिन्हें मैं लॉग इन करना चाहूंगा।
लेगना

1
अपने स्प्रिंग बूट प्रोजेक्ट के साथ मैंने इसे एक प्रोफ़ाइल YML conf फ़ाइल में जोड़ा। लेकिन यह काम नहीं किया, बस इस धागे पर दूसरों के पदों की तरह ... हाइबरनेट लॉग कोई भी बात नहीं लिखी जा रही है जो मैं निर्दिष्ट करता हूं। क्या इसे लॉगबैक कॉन्फिगर, एप्लिकेशन याम फाइल और pom.xml के अलावा कहीं और हैंडल किया जा सकता है?
एलेक्स

33

निष्पादित:

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

हाइबरनेट की शुरुआत से पहले मेरे लिए काम किया।


नोट: ऊपर दी गई लाइन हर लॉगिंग को बंद कर देगी ( 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);
रफीअल्हमद

16

हाइबरनेट के इस प्रॉप्स को सेट करने के लिए आप हाइबरनेट के कई आउटपुट को अक्षम कर सकते हैं (एचबी कॉन्फ़िगरेशन) एक गलत:

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

लेकिन अगर आप सभी कंसोल जानकारी को अक्षम करना चाहते हैं, तो आपको लकड़हारे के स्तर को किसी वर्ग के FATAL org.hibernateजैसे जूहा कहना होगा।


क्या होगा यदि मैं आंकड़े उत्पन्न करना चाहता हूं, लेकिन लॉग नहीं?
चिह्न mark

7

मैंने आखिरकार यह पता लगा लिया, क्योंकि हाइबरनेट अब slf4j लॉग मुखौटा का उपयोग कर रहा है, log4j पर पुल करने के लिए, आपको log4j और slf4j-log4j12 जार को अपने काम में लगाने की आवश्यकता है और फिर log4j गुण हाइबरनेट लॉग को नियंत्रित करेंगे।

मेरा 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अपने वीएम विकल्पों में जोड़कर हाइबरनेट का उपयोग स्पष्ट रूप से कर सकते हैं। मैंने इस विषय पर एक लेख लिखा है: medium.com/@scadge/how-to-enable-hibernate-log-dc11545efd3d
19 को Scadge

5

Hibernate:selectलॉग में संदेश को अक्षम करने के लिए, संपत्ति को इसमें सेट करना संभव है HibernateJpaVendorAdapter:

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

4

उन लोगों के लिए जो सुरुचिपूर्ण समाधान नहीं चाहते हैं, बस उन संदेशों को रोकने का एक त्वरित और गंदा तरीका है, यहां एक समाधान है जो मेरे लिए काम करता है (मैं हाइबरनेट 4.3.6 और ग्रहण का उपयोग करता हूं और ऊपर दिए गए कोई उत्तर नहीं देता (या इंटरनेट पर पाया गया)) काम किया; न तो 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.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

Slf4j-jdk14-xxx.jar को slf4j-log4j12-xxx.jar से बदलें। यदि आपके पास दोनों हैं, तो slf4j-jdk14-xxx.jar को हटा दें। Https://forum.hibernate.org/viewtopic.php?f=1&t=999623 पर यह समाधान मिला


महान, यह काम करता है। मैं log4j.propertiesकॉन्फ़िगरेशन का उपयोग कर सकता हूं ; log4j.logger.org.hibernate=OFF
सेबस्टियन

0

कंसोल में लकड़हारा आउटपुट से छुटकारा पाने के लिए यह प्रयास करें।

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

loggerContext.stop();

इन कथनों ने लकड़हारे से सभी कंसोल आउटपुट को निष्क्रिय कर दिया।


0

हाइबरनेट लॉगिंग के कई हिस्से हैं जो आप हाइबरनेट पैकेज के लकड़हारा पदानुक्रम ( यहां लकड़हारा पदानुक्रम पर अधिक ) के आधार पर नियंत्रित कर सकते हैं ।

    <!-- 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.