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 ...
) प्राप्त कर रहे हैं , तो स्टैक ओवरफ्लो प्रश्न " कंसोल को हाइबरनेट लॉगिंग बंद करें " लागू हो सकता है।