आप SLF4J का उपयोग करने के लिए हाइबरनेट 4 में लॉगिंग को कैसे कॉन्फ़िगर करते हैं


114

हाइबरनेट 3.x का इस्तेमाल किया लॉगिंग के लिए। सीतनिद्रा में होना 4.x का उपयोग करता है। मैं एक स्टैंडअलोन एप्लिकेशन लिख रहा हूं जो लॉगिंग के लिए हाइबरनेट 4, और SLF4J का उपयोग करता है।

मैं SLF4J में प्रवेश करने के लिए हाइबरनेट को कैसे कॉन्फ़िगर कर सकता हूं?

यदि यह संभव नहीं है, तो मैं हाइबरनेट के लॉगिंग को कैसे कॉन्फ़िगर कर सकता हूं?

लॉगिंग पर हाइबरनेट 4.1 मैनुअल सेक्शन इस चेतावनी के साथ शुरू होता है कि ...

पूरी तरह से पुराना है। हाइबरनेट 4.0 में शुरू JBoss लॉगिंग का उपयोग करता है। जैसा कि हम इस सामग्री को डेवलपर गाइड पर भेजते हैं, यह प्रलेखित हो जाएगा।

... SLF4J के बारे में बात करता है, और इसलिए बेकार है। न तो आरंभ करने के लिए गाइड और न ही डेवलपर गाइड में लॉग इन करने की बात करते हैं। न ही माइग्रेशन गाइड करता है ।

मैंने स्वयं jboss- लॉगिंग पर प्रलेखन की तलाश की है, लेकिन मुझे कोई भी नहीं मिल पाया है। GitHub पेज खामोश है , और JBoss के समुदाय परियोजनाओं पेज नहीं है यहां तक कि सूची jboss-लॉगिंग। मुझे आश्चर्य है कि अगर वें परियोजना के बग ट्रैकर में प्रलेखन प्रदान करने से संबंधित कोई समस्या हो सकती है, लेकिन यह नहीं है।

अच्छी खबर यह है कि JBoss AS7 जैसे एप्लिकेशन सर्वर के अंदर हाइबरनेट 4 का उपयोग करते समय, लॉगिंग का बड़े पैमाने पर ध्यान रखा जाता है। लेकिन मैं इसे स्टैंडअलोन एप्लिकेशन में कैसे कॉन्फ़िगर कर सकता हूं?



एक सिस्टम प्रॉपर्टी को सेट कर सकता है। org.jboss.log.provide = slf4j अधिक जानकारी के लिए कृपया लिंक docs.jboss.org/hibernate/orm/4.3/topical/html/log/… पर जाएं। हाइबरनेट संस्करण के लिए 3. से अधिक 3.
अभिषेक रंजन

जवाबों:


60

Https://github.com/jboss-logging/jboss-logging/blob/master/src/main/java/org/jboss/logging/LoggerProviders.java पर देखें :

static final String LOGGING_PROVIDER_KEY = "org.jboss.logging.provider";

private static LoggerProvider findProvider() {
    // Since the impl classes refer to the back-end frameworks directly, if this classloader can't find the target
    // log classes, then it doesn't really matter if they're possibly available from the TCCL because we won't be
    // able to find it anyway
    final ClassLoader cl = LoggerProviders.class.getClassLoader();
    try {
        // Check the system property
        final String loggerProvider = AccessController.doPrivileged(new PrivilegedAction<String>() {
            public String run() {
                return System.getProperty(LOGGING_PROVIDER_KEY);
            }
        });
        if (loggerProvider != null) {
            if ("jboss".equalsIgnoreCase(loggerProvider)) {
                return tryJBossLogManager(cl);
            } else if ("jdk".equalsIgnoreCase(loggerProvider)) {
                return tryJDK();
            } else if ("log4j".equalsIgnoreCase(loggerProvider)) {
                return tryLog4j(cl);
            } else if ("slf4j".equalsIgnoreCase(loggerProvider)) {
                return trySlf4j();
            }
        }
    } catch (Throwable t) {
    }
    try {
        return tryJBossLogManager(cl);
    } catch (Throwable t) {
        // nope...
    }
    try {
        return tryLog4j(cl);
    } catch (Throwable t) {
        // nope...
    }
    try {
        // only use slf4j if Logback is in use
        Class.forName("ch.qos.logback.classic.Logger", false, cl);
        return trySlf4j();
    } catch (Throwable t) {
        // nope...
    }
    return tryJDK();
}

तो के लिए संभावित मान org.jboss.logging.providerहैं: jboss, jdk, log4j, slf4j

यदि आप सेट नहीं करते हैं तो org.jboss.logging.providerयह jboss की कोशिश करता है, फिर log4j, फिर slf4j (केवल अगर logback का उपयोग किया जाता है) और jdk पर वापस आ जाता है।

मैं इसके slf4jसाथ उपयोग करता हूं logback-classic:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.13</version>
        <scope>${logging.scope}</scope>
    </dependency>

और सब ठीक है!

अद्यतन कुछ उपयोगकर्ता बहुत मुख्य App.java में उपयोग करते हैं:

static { //runs when the main class is loaded.
    System.setProperty("org.jboss.logging.provider", "slf4j");
}

लेकिन कंटेनर आधारित समाधानों के लिए यह काम नहीं किया जाता है।

अद्यतन 2 जो लोग सोचते हैं कि वे इसके लिए SLF4J के साथ Log4j का प्रबंधन करते jboss-loggingहैं, इस प्रकार ठीक नहीं है। jboss-loggingसीधे SL44J के बिना Log4j का उपयोग करता है!


1
कहां स्थापित करें org.jboss.logging.provider?
सुजान सिओक

1
@SuzanCioc आपके अनुसार System.getProperty(LOGGING_PROVIDER_KEY);सेट सिस्टम प्रॉपर्टी की जरूरत है। java -D...=...आपके कंटेनर के लिए डॉक्स के माध्यम से या जाँच करें।
गवेंको

1
Slf4j के माध्यम से log4j का उपयोग करने में सक्षम नहीं होने के बारे में आपका दूसरा अपडेट सहायक था। Org.jboss.log.provider को slf4j पर सेट करने से मुझे लगता है कि log4 की मेरी बैकिंग में किक होगी। हालांकि यह नहीं हुआ। मुझे उस कार्य के लिए सीधे log4j पर सेट करना था। अजीब। फिर इस कॉन्फिगरेशन के विकल्प के रूप में slf4j क्या है?
ट्रैविस स्पेंसर

27

SLF4J को लॉगबैक के बिना JBoss लॉगिंग के साथ काम करने के लिए क्योंकि बैकेंड को सिस्टम प्रॉपर्टी के उपयोग की आवश्यकता होती है org.jboss.logging.provider=slf4jlog4j-over-slf4jइस मामले में रणनीति काम नहीं कर रही है क्योंकि लॉगिंग JDK पर वापस आ जाएगी यदि लॉगबैक और लॉग 4j वास्तव में क्लासपैथ में मौजूद नहीं है।

यह एक उपद्रव का एक सा है और काम करने के लिए ऑटोडेटेनेशन प्राप्त करने के लिए आपने देखा है कि ch.qos.logback.classic.Loggerक्लास लोडर में कम से कम लॉगबैक-क्लासिक या org.apache.log4j.Hierarchyलॉग 4 जे से ट्रब होता है जो जेबॉस लॉगिंग से वापस जेडीआई लॉगिंग में नहीं गिरता है।

जादू की व्याख्या की जाती है org.jboss.logging.LoggerProviders

अद्यतन: सेवा लोडर समर्थन जोड़ा गया है, इसलिए यह घोषणा के साथ ऑटोडेटेक्शन के साथ समस्याओं से बचने के लिए संभव है META-INF/services/org.jboss.logging.LoggerProvider( org.jboss.logging.Slf4jLoggerProviderमूल्य के रूप में)। वहाँ के रूप में अच्छी तरह से समर्थन log4j2 जोड़ा जा रहा है।


1
मैंने यह सिस्टम प्रॉपर्टी कहां सेट की है?
जहेदुस

आपके सेटअप पर निर्भर करता है, लेकिन आम तौर पर एक कमांड लाइन स्विच -Dorg.jboss.logging.provider=slf4jपर्याप्त है। LoggingProviders.java आपको वर्तमान स्वीकृत मूल्यों के बारे में बेहतर जानकारी देता है और क्लासपाथ में मौजूद होने की उम्मीद है।
तूमास किवियाहो

2
मुझे नहीं लगता कि सेवा लोडर दृष्टिकोण काम करता है क्योंकि Slf4jLoggerProviderएक publicवर्ग नहीं है ?
होल्मिस 83

मुझे org.jboss.logging.provider को एक वेबलॉग WAR में स्रोत कोड में सेट करने की आवश्यकता है, लेकिन लॉगिंगप्रोवाइडर्स एक के बाद किसी भी स्थिर वर्ग के इंतिलाइज़र को आमंत्रित किया जाता है!
एंटोनियो पेट्रीका

12

Leif के Hypoport पोस्ट से प्रेरित होकर , यह है कि मैं '' biber '' हाइबरनेट 4 को वापस slf4j पर ले जाता हूं:

मान लेते हैं कि आप मावेन का उपयोग कर रहे हैं।

  • org.slf4j:log4j-over-slf4jअपने पर निर्भरता के रूप में जोड़ेंpom.xml
  • आदेश का उपयोग करके mvn dependency:tree, सुनिश्चित करें कि आप जिन कलाकृतियों का उपयोग कर रहे हैं , उनमें से कोई भीslf4j:slf4j सटीक नहीं है (सटीक होने के लिए, किसी भी कलाकृतियों का संकलन गुंजाइश निर्भरता या रनटाइम गुंजाइश निर्भरता नहीं होगी slf4j:slf4j)

पृष्ठभूमि: हाइबरनेट 4.x की कलाकृतियों पर निर्भरता है org.jboss.logging:jboss-logging। संक्रामक, इस विरूपण साक्ष्य एक है प्रदान की विरूपण साक्ष्य पर गुंजाइश निर्भरता slf4j:slf4j

जैसा कि हमने अब org.slf4j:log4j-over-slf4jकलाकृतियों को जोड़ा है, कलाकृतियों की org.slf4j:log4j-over-slf4jनकल करते हैं slf4j:slf4j। इसलिए सब कुछ है कि JBoss Loggingलॉग अब वास्तव में slf4j के माध्यम से जाना जाएगा।

मान लीजिए कि आप लॉगिंग बैकएंड के रूप में लॉगबैक का उपयोग कर रहे हैं । यहाँ एक नमूना हैpom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    ....
    <properties>
        ....
        <slf4j-api-version>1.7.2</slf4j-api-version>
        <log4j-over-slf4j-version>1.7.2</log4j-over-slf4j-version>
        <jcl-over-slf4j-version>1.7.2</jcl-over-slf4j-version> <!-- no problem to have yet another slf4j bridge -->
        <logback-core-version>1.0.7</logback-core-version>
        <logback-classic-version>1.0.7</logback-classic-version>
        <hibernate-entitymanager-version>4.1.7.Final</hibernate-entitymanager-version> <!-- our logging problem child -->
    </properties>

    <dependencies>
            <!-- begin: logging-related artifacts .... -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j-api-version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${jcl-over-slf4j-version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
                <version>${log4j-over-slf4j-version}</version>
            </dependency>   
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${logback-core-version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback-classic-version}</version>
            </dependency>
            <!-- end: logging-related artifacts .... -->

            <!-- begin: some artifact with direct dependency on log4j:log4j ....  -->
            <dependency>
            <groupId>org.foo</groupId>
                <artifactId>some-artifact-with-compile-or-runtime-scope-dependency-on-log4j:log4j</artifactId>
                <version>${bla}</version>
                <exclusions>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>   
            </dependency>
            <!-- begin: some artifact with direct dependency on log4j:log4j ....  -->

            <!-- begin: a hibernate 4.x problem child........... -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>${hibernate-entitymanager-version}</version>
            </dependencies>
            <!-- end: a hibernate 4.x problem child........... -->
    ....
</project>

अपने वर्गपथ पर logback.xml, जैसे कि यह एक में स्थित है src/main/java:

<!-- begin: logback.xml -->
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender> 

<logger name="org.hibernate" level="debug"/>

<root level="info">
    <appender-ref ref="console"/>
</root>

</configuration>
<!-- end: logback.xml -->

कुछ घटक logback.xmlजेवीएम स्टार्ट-अप समय पर उचित लॉगिंग के लिए उपयोग कर सकते हैं , उदाहरण के लिए जेट्टी मावेन प्लगइन। उस स्थिति में, logback.configurationFile=./path/to/logback.xmlअपने आदेश में एक जावा सिस्टम जोड़ें (उदाहरण के लिए mvn -Dlogback.configurationFile=./target/classes/logback.xml jetty:run)।

यदि आप अभी भी "कच्चे" कंसोल को स्टडआउट हाइबरनेट आउटपुट (जैसे Hibernate: select ...) प्राप्त कर रहे हैं , तो स्टैक ओवरफ्लो प्रश्न " कंसोल को हाइबरनेट लॉगिंग बंद करें " लागू हो सकता है।


1
सुनिश्चित करें कि कोई अन्य लाइब्रेरी लॉग 4j को नहीं हटाता है, या यह काम नहीं करेगा। उदाहरण: activemq-all.jar में log4j शामिल है। संकेत: अपना आईडीई खोलें और अपने कोड में लॉग 4 जे आसानी से खोजें।
दिमित्री डेवले

मुझे JBoss Hibernate4 और एक (बहुत) पुराने सर्वर के साथ यह समस्या थी। इस पोस्ट में application.properties में 1 लाइन भी शामिल है। तो TNX !!! और मेरे गुणों में वह अंतिम पंक्ति यहाँ एक अन्य उत्तर में लिखी गई थी:org.jboss.logging.provider=slf4j
जीरोन वैन डिजक-जून

8

पहले आप महसूस करते हैं कि SLF4J एक लॉगिंग लाइब्रेरी सही नहीं है, इसका लॉगिंग आवरण। यह स्वयं कुछ भी लॉग नहीं करता है, यह केवल "बैकएंड" को दर्शाता है।

Jboss- लॉगिंग को "कॉन्फिगर" करने के लिए आप बस अपने क्लासपाथ (jboss-logging के साथ) और jboss- लॉगिंग के आंकड़े जो भी इस्तेमाल करना चाहते हैं, उसे बाकी हिस्सों से जोड़ दें।

मैंने JBoss लॉगिंग कॉन्फ़िगरेशन के लिए एक हाइबरनेट-केंद्रित गाइड बनाया: http://docs.jboss.org/hibernate/orm/4.3/topical/html/logging/Logging.html


2
मुझे पता है कि SLF4J एक मुखौटा है, हाँ। SLF4J के लिए हाइबरनेट लॉगिंग भेजने का मतलब है कि यह मेरे आवेदन के बाकी हिस्सों के लिए जो भी बैकएंड मैंने चुना है, जो कि मुझे चाहिए।
टॉम एंडरसन

10
तो आप कॉन्फ़िगरेशन के बारे में क्या कह रहे हैं कि कोई कॉन्फ़िगरेशन नहीं है (जो अच्छा है!), लेकिन उस jboss- लॉगिंग किसी भी तरह का पता लगाता है और बैकएंड का चयन करता है। आह, अब मैं वास्तव में कोड को देखने के लिए समय लेता हूं, मैं देखता हूं कि वास्तव में ऐसा ही होता है । विशेष रूप से, jboss- लॉगिंग कोशिश करता है, क्रम में, JBoss LogManager, log4j, Logback SLF4J के माध्यम से, और JDK लॉगिंग। लेकिन यह सिस्टम की संपत्ति के साथ ओवरराइड किया जा सकता है org.jboss.logging.provider
टॉम एंडरसन

2
हम में से बहुत से लोग आपके लिए चीजों को लॉग-इन करके कॉमन्स-लॉगिंग कर गए हैं, इसलिए यह जानना कि वास्तव में अप्रत्याशित रूप से होने पर वास्तविक दुनिया में इसका समर्थन करने में सक्षम होने के लिए jboss- लॉगिंग कैसे काम करता है।
एम्स

1
वास्तव में ऊपर दिए गए लिंक से पता चलता है कि क्या होता है, यदि आप वास्तव में जो देखना चाहते हैं, तो उसका पालन न करें ...
स्टीव एबर्सोल

3

मैं एक स्टैंडअलोन ऐप में हाइबरनेट कोर 4.1.7.Final प्लस स्प्रिंग 3.1.2 का उपयोग कर रहा हूं। मैंने अपने आश्रितों के लिए Log4j 1.2.17 जोड़ा और ऐसा लगता है, जैसे कि JBoss लॉगिंग लॉग 4j में सीधे लॉग करता है यदि उपलब्ध हो और स्प्रिंग कॉमन्स लॉगिंग का उपयोग करता हो, तो डायन भी लॉग 4j का उपयोग करता है यदि उपलब्ध हो, तो सभी लॉगिंग को लॉगजीजे के माध्यम से कॉन्फ़िगर किया जा सकता है।

यहाँ प्रासंगिक निर्भरता की मेरी सूची है:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.1.7.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

3

तो, बस यह मेरी परियोजना में काम कर रहा है। हाइबरनेट 4, slf4j, लॉगबैक। मेरी परियोजना में बाधा है, लेकिन मावेन के लिए समान होना चाहिए।

मूल रूप से अब्दुल सही है। जहां वह सही नहीं है, क्या आपको आश्रितों से slf4j को हटाना है।

  1. गुंजाइश संकलित करने के लिए शामिल करें:

    org.slf4j: slf4j-api

    org.slf4j: log4j-ओवर-slf4j

    उदाहरण के लिए लॉगबैक (ch.qos.logback: logback-classic, ch.qos.logback: logback-core: 1.0.12)

  2. पूरी तरह से निर्भरता से log4j libs को बाहर करें

परिणाम: हाइबरनेट slf4j के माध्यम से लॉगबैक में जाता है। बेशक आप लॉगबैक की तुलना में अलग लॉग कार्यान्वयन का उपयोग करने में सक्षम होना चाहिए

यह सुनिश्चित करने के लिए कि कोई log4j मौजूद नहीं है, युद्ध फ़ाइलों के लिए classpath या web-inf / lib पर अपने काम की जाँच करें।

बेशक आपने logback.xml में लकड़हारा सेट किया है जैसे:

<logger name="org.hibernate.SQL" level="TRACE"/>


यह सटीक मुद्दा था। log4j को दूसरे पुस्तकालय से एक सकर्मक निर्भरता के रूप में लाया जा रहा था। इसे छोड़कर, और हाइबरनेट लॉगिंग ने लॉगबैक और slf4j log4j पुल का उपयोग करके अपेक्षित रूप से काम करना शुरू कर दिया
पॉल ज़ेपरनिक

3

हाइबरनेट 4.3 में नियंत्रण के बारे में कुछ दस्तावेज हैं org.jboss.logging:

  • यह लॉगिंग प्रदाता के लिए वर्ग-पथ की खोज करता है । यह log4j की खोज के बाद slf4j के लिए खोज करता है। इसलिए, सिद्धांत रूप में, यह सुनिश्चित करना कि आपके वर्गपथ (WAR) में log4j शामिल नहीं है और इसमें slf4j एपीआई और एक बैक-एंड काम करना चाहिए।

  • अंतिम उपाय के रूप में आप org.jboss.logging.providerसिस्टम प्रॉपर्टी को सेट कर सकते हैं slf4j


दस्तावेज़ीकरण के दावों के org.jboss.loggingबावजूद, log4j का उपयोग करने की कोशिश करने पर जोर दिया गया, log4j अनुपस्थित और SLF4J मौजूद होने के बावजूद, मेरी टोमाट लॉग फ़ाइल में निम्न संदेश के परिणामस्वरूप ( /var/log/tomcat/catalina.out):

 log4j:WARN No appenders could be found for logger (org.jboss.logging).
 log4j:WARN Please initialize the log4j system properly.
 log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

मुझे dasAnderl ausMinga द्वारा उत्तर के सुझाव का पालन करना था और log4j-over-slf4jपुल को शामिल करना था।


2

मैं मावेन का उपयोग करता हूं और निम्नलिखित निर्भरता को जोड़ा है:

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

फिर, मैंने इसमें एक log4j.propertiesफाइल बनाई /src/main/resources:

# 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
# set log levels
log4j.rootLogger=warn

यह इसे आपकी जड़ में डाल देगा .jar। यह एक सम्मोहन की तरह काम करता है...


3
यह log4j के उपयोग को कॉन्फ़िगर करता है। ओपी log4j का उपयोग नहीं करना चाहता है; वे slf4j का उपयोग करना चाहते हैं।
राएडवल्ड

1

मेरे पास वेबलॉजिक 12 सी और लॉग 4 जे के साथ हाइबरनेट 4 लॉगिंग कार्य करने के लिए एक मुद्दा था। समाधान के लिए अपने weblogic-application.xml में निम्नलिखित है:

<prefer-application-packages>
    <package-name>org.apache.log4j.*</package-name>
    <package-name>org.jboss.logging.*</package-name>
</prefer-application-packages>

0

किसी के लिए भी वही समस्या का सामना करना पड़ सकता है जो मुझे था। यदि आपने यहां बताए गए अन्य सभी समाधानों की कोशिश की है और अभी भी हाइबरनेट लॉगिंग को अपने slf4j के साथ काम करते नहीं देखा है, तो ऐसा इसलिए हो सकता है क्योंकि आप एक कंटेनर का उपयोग कर रहे हैं जो उसके फ़ोल्डर पुस्तकालयों में jboss-logging.jar है। इसका मतलब है कि इससे पहले कि आप इसे प्रभावित करने के लिए किसी भी कॉन्फ़िगरेशन को सेट कर सकते हैं, पहले से लोड हो जाता है। वेबलॉग में इस समस्या से बचने के लिए, आप फ़ाइल weblogic-application.xml में निर्दिष्ट कर सकते हैं आप आवेदन से भरी हुई लाइब्रेरी को पसंद करने के लिए कान / मेटा-इन में। अन्य सर्वर कंटेनरों के लिए एक समान तंत्र होना चाहिए। मेरे मामले में मुझे जोड़ना था:

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.5/weblogic-application.xsd">
   <wls:prefer-application-packages>    
       <!-- logging -->
       <wls:package-name>org.slf4j.*</wls:package-name>
       <wls:package-name>org.jboss.logging.*</wls:package-name>             
   </wls:prefer-application-packages>
   <wls:prefer-application-resources>
        <wls:resource-name>org/slf4j/impl/StaticLoggerBinder.class</wls:resource-name>
    </wls:prefer-application-resources>     
</wls:weblogic-application>

-2

क्या आपने यह कोशिश की:

- Log4J के मामले में slf4j-log4j12.jar। अधिक विवरण के लिए SLF4J प्रलेखन देखें। Log4j का उपयोग करने के लिए आपको अपने classpath में log4j.properties फ़ाइल भी रखनी होगी। एक उदाहरण गुण फ़ाइल siber / निर्देशिका में हाइबरनेट के साथ वितरित की जाती है

सिर्फ क्लास जार में इन जार और गुण या log4j xml जोड़ें


4
यह हाइबरनेट 3.x प्रलेखन से एक उद्धरण है। क्या आपको लगता है कि अभी भी हाइबरनेट 4.x के साथ काम करेगा, जो SLF4J का उपयोग नहीं करता है?
टॉम एंडरसन

जहाँ तक मुझे याद है log4j ही काफी है
Avihai Marchiano
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.