লাইফের হাইপোপার্ট পোস্টটি দ্বারা অনুপ্রাণিত হয়ে আমি এভাবেই হাইবারনেটকে " বেঁকে " slf4j এ ফিরে যাই:
ধরে নেওয়া যাক আপনি মাভেন ব্যবহার করছেন।
- যোগ
org.slf4j:log4j-over-slf4j
করার জন্য একটি নির্ভরতা হিসাবে আপনারpom.xml
- কমান্ড ব্যবহার
mvn dependency:tree
, নিশ্চিত করুন কেউ নিদর্শন আপনার উপর depende ব্যবহার করছেন এর slf4j:slf4j
(ভালো হবে, কোন হস্তনির্মিত বস্তু একটি থাকিবে কম্পাইল সুযোগ নির্ভরতা বা রানটাইম উপর সুযোগ নির্ভরতা slf4j:slf4j
)
পটভূমি: হাইবারনেট ৪.০ এর নিদর্শনটির উপর নির্ভরতা রয়েছে 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 ...
) পান, তবে স্ট্যাক ওভারফ্লো প্রশ্ন " কনসোলে হাইবারনেট লগিং বন্ধ করুন " প্রয়োগ হতে পারে।