আপনি কীভাবে এসএলএফ 4 জে ব্যবহার করতে হাইবারনেট 4 এ লগিং কনফিগার করবেন


114

হাইবারনেট ৩.x ব্যবহার করা হয়েছে লগিং জন্য। হাইবারনেট 4.x ব্যবহার করে। আমি একটি স্বতন্ত্র অ্যাপ্লিকেশন লিখছি যা লগিংয়ের জন্য হাইবারনেট 4, এবং এসএলএফ 4 জে ব্যবহার করে।

আমি কীভাবে এসএলএফ 4 জে লগ করতে হাইবারনেট কনফিগার করতে পারি?

যদি এটি সম্ভব না হয় তবে আমি কীভাবে হাইবারনেটের লগিং কনফিগার করব?

লগিংয়ের হাইবারনেট ৪.১ ম্যানুয়াল বিভাগটি হ'ল সতর্কতা দিয়ে শুরু হয় ...

পুরোপুরি পুরানো। হাইবারনেট জেবিস লগিং ব্যবহার করে ৪.০ থেকে শুরু করে। বিকাশকারী গাইডটিতে এই বিষয়বস্তুটি স্থানান্তরিত হওয়ার সাথে সাথে এটি নথিভুক্ত হবে।

... এসএলএফ 4 জে সম্পর্কে কথা বলতে চলেছে, এবং তাই অকেজো। প্রারম্ভিক গাইড বা বিকাশকারী গাইড লগইন করার বিষয়ে মোটেই কথা বলেন না। না মাইগ্রেশন গাইড

আমি নিজেই jboss- লগিংয়ের জন্য ডকুমেন্টেশন সন্ধান করেছি, তবে আমি কোনও সন্ধান করতে সক্ষম হইনি। GitHub পৃষ্ঠা নীরব , এবং JBoss এর সম্প্রদায় প্রকল্প পৃষ্ঠা না এমনকি তালিকা jboss-লগিং। আমি ভাবলাম যে এই প্রকল্পের বাগ ট্র্যাকারে ডকুমেন্টেশন সরবরাহ সম্পর্কিত কোনও সমস্যা থাকতে পারে, তবে তা হয় না।

সুসংবাদটি হ'ল JBoss AS7 এর মতো অ্যাপ্লিকেশন সার্ভারের মধ্যে হাইবারনেট 4 ব্যবহার করার সময় লগিং আপনার জন্য বেশিরভাগ ক্ষেত্রে যত্ন নেওয়া হয়। তবে আমি কীভাবে এটি একটি স্বতন্ত্র অ্যাপ্লিকেশনটিতে কনফিগার করতে পারি?


13
+1 হাইলাইট করার জন্য যে লগ ইন করার হাইবারনেট ডক্স
পুরানো

কেউ org.jboss.logging.provide = slf4j সিস্টেমের বৈশিষ্ট্য সেট করতে পারে। আরও তথ্যের জন্য অনুগ্রহ করে লিংকটি ডকস.জ্বোবস.আর.সি . / হাইবারনেট / হরমোন / ৪.৩ / টোপিকাল / এইচটিএমএল / ব্লগিং /… টির চেয়ে বেশি হাইবারনেট সংস্করণ দেখুন
অভিষেক রঞ্জন

উত্তর:


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 (কেবল লগব্যাক ব্যবহৃত হলে) এবং জেডিকে ফ্যালব্যাক।

আমি ব্যবহার slf4jসঙ্গে logback-classic:

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

এবং সব ঠিক আছে!

আপডেট করুন কিছু ব্যবহারকারী খুব প্রধান অ্যাপ.জভাতে ব্যবহার করেন:

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

তবে ধারক ভিত্তিক সমাধানগুলির জন্য এটি কার্যকর হয় না।

আপডেট 2 যাঁরা ভাবেন যে তারা লোগ 4 জে এসএলএফ 4 জে পরিচালনা করেন jboss-loggingএটি ঠিক তেমনটি নয়। jboss-loggingএসএলএফ 4 জ ছাড়াই লগ 4j সরাসরি ব্যবহার করে!


1
কোথায় সেট করবেন org.jboss.logging.provider?
সুজন সিওক

1
@ সুজানসিওক অনুসারে System.getProperty(LOGGING_PROVIDER_KEY);আপনার দরকার সিস্টেমের সম্পত্তি। java -D...=...আপনার ধারকটির জন্য ডক্সের মাধ্যমে বা চেক করুন।
gavenkoa

1
Slf4j এর মাধ্যমে log4j ব্যবহার করতে সক্ষম না হওয়া সম্পর্কে আপনার দ্বিতীয় আপডেটটি সহায়ক ছিল। Org.jboss.logging.provider কে slf4j এ সেট করার ফলে আমার মনে হয়েছে যে লগ 4 জে আমার ব্যাকিং শুরু হবে It যদিও এটি হয়নি। কাজ করার জন্য আমাকে সরাসরি লগ 4 জে সেট করতে হয়েছিল। অস্বাভাবিক. এই কনফিগারেশনের জন্য বিকল্প হিসাবে slf4j এর বিন্দুটি কী?
ট্র্যাভিস স্পেন্সার

27

এসএলএফ 4 জে JBoss এর সাথে কাজ করার জন্য লগব্যাক ছাড়াই লগইন করা যেমন ব্যাকএন্ডে একটি সিস্টেম সম্পত্তি ব্যবহার করা দরকার org.jboss.logging.provider=slf4jlog4j-over-slf4jকৌশলগুলি এই ক্ষেত্রে কাজ করছে বলে মনে হচ্ছে না কারণ লগব্যাক বা লগ 4 জে না আসলে ক্লাসপথে উপস্থিত না থাকলে লগইনটি জেডিকে ফিরবে।

এটি কিছুটা উপদ্রব এবং কাজের স্বায়ত্তর সন্ধানের জন্য আপনি দেখতে পাচ্ছেন যে ক্লাস লোডারে কমপক্ষে 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
আমি এই সিস্টেমের সম্পত্তিটি কোথায় সেট করব?
heেগেদুস

আপনার সেটআপ উপর নির্ভর করে, কিন্তু সাধারণত একটি কমান্ড লাইন সুইচ -Dorg.jboss.logging.provider=slf4jযথেষ্ট। লগিংপ্রভাইডার্স.জভা আপনাকে বর্তমান গৃহীত মানগুলি এবং শ্রেণিপথে উপস্থিত থাকার প্রত্যাশার বিষয়ে আরও ভাল অন্তর্দৃষ্টি দেয়।
টুওমাস কিভিয়াহো

2
আমার মনে হয় না সার্ভিস লোডার পদ্ধতির কাজ হয় কারণ Slf4jLoggerProviderকোনও publicশ্রেণি নেই?
holmis83

আমাকে সোর্স কোডে একটি ওয়েবলোগিক ওয়ারে org.jboss.logging.provider সেট করা দরকার, তবে কোনও স্ট্যাটিক ক্লাস ইনটিয়ায়ালাইজার লগিংপ্রভাইডারগুলির পরে শুরু করা হয়!
আন্তোনিও পেট্রিক্কা

12

লাইফের হাইপোপার্ট পোস্টটি দ্বারা অনুপ্রাণিত হয়ে আমি এভাবেই হাইবারনেটকে " বেঁকে " 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 ...) পান, তবে স্ট্যাক ওভারফ্লো প্রশ্ন " কনসোলে হাইবারনেট লগিং বন্ধ করুন " প্রয়োগ হতে পারে।


1
নিশ্চিত করুন যে অন্য কোনও লাইব্রেরি লগ 4 জে আইক্লুড করে না, বা এটি কাজ করবে না। উদাহরণস্বরূপ: অ্যাক্টিভিক্যুয়াল-অল.জারে লগ 4 জে রয়েছে। ইঙ্গিত: আপনার আইডিই খুলুন এবং আপনার কোডগুলিতে লগ 4j সহজেই সন্ধান করুন।
দিমিত্রি দেওয়ালে

আমার JBoss হাইবারনেট 4 এবং একটি (খুব) পুরানো সার্ভার নিয়ে এই সমস্যা ছিল। অ্যাপ্লিকেশনটিতে 1 লাইন সহ এই পোস্টটি। তো টিএনএক্স !!! এবং আমার সম্পত্তিগুলির শেষ লাইনটি এখানে অন্য উত্তরে লেখা হয়েছিল:org.jboss.logging.provider=slf4j
জেরোইন ভ্যান ডিজক-জুন

8

প্রথমে আপনি বুঝতে পারবেন যে এসএলএফ 4 জে কোনও লগিং লাইব্রেরী নয়, এটি লগিংয়ের মোড়ক। এটি নিজেই কিছু লগ করে না, এটি কেবল "ব্যাকেন্ডস" এ প্রতিনিধিত্ব করে।

Jboss- লগিং "কনফিগার" করতে আপনি নিজের ক্লাসপথে (jboss-logging সহ) যাবতীয় লগ ফ্রেমওয়ার্ক যুক্ত করতে পারেন এবং বাকীগুলি jboss- লগিংয়ের পরিসংখ্যানগুলি যোগ করুন।

আমি জেবস লগিং কনফিগারেশনের জন্য হাইবারনেট-কেন্দ্রিক গাইড তৈরি করেছি: http://docs.jboss.org/hibernate/orm/4.3/topical/html/logging/Logging.html


2
আমি বুঝতে পারি যে এসএলএফ 4 জে হ'ল একটি মুখোমুখি। এসএলএফ 4 জে হাইবারনেট লগিং প্রেরণের অর্থ এই যে আমি আমার বাকী অ্যাপ্লিকেশনটির জন্য যা বেছে নিয়েছি তা শেষ হয়, যা আমি চাই।
টম অ্যান্ডারসন

10
সুতরাং আপনি কনফিগারেশন সম্পর্কে যা বলছেন সেটি হচ্ছে কোনও কনফিগারেশন নেই (যা দুর্দান্ত!), তবে সেই জবস-লগিং কোনওভাবে সনাক্ত করে এবং একটি ব্যাকএন্ড নির্বাচন করে? আহ, এখন আমি কোডটি প্রকৃতপক্ষে দেখার জন্য সময় নিই, আমি দেখতে পাই ঠিক এটি ঘটে । বিশেষত, jboss- লগিং চেষ্টা করে, ক্রমে, JBoss লগম্যানেজার, log4j, SLF4J মাধ্যমে লগব্যাক, এবং JDK লগিং। তবে এটি সিস্টেমের সম্পত্তি দিয়ে ওভাররাইড করা যেতে পারে org.jboss.logging.provider
টম অ্যান্ডারসন

2
আমাদের মধ্যে অনেকেই আপনার জন্য জিনিসগুলি লগ-ইন করার পরিসংখ্যান দ্বারা পোড়া হয়েছে, সুতরাং জবস-লগিং কীভাবে কাজ করে তা সঠিকভাবে জেনে রাখা যখন অপ্রত্যাশিত ঘটনা ঘটে তখন সত্যিকারের বিশ্বে এটি সমর্থন করতে সক্ষম হওয়ার জন্য গুরুত্বপূর্ণ।
এমএস

1
উপরের লিঙ্কটি আসলে যা ঘটেছিল তা হ'ল যা আপনি যা দেখতে চান তা
হ'ল

3

আমি হাইবারনেট কোর ৪.১..7 ব্যবহার করছি inalফাইনাল প্লাস স্প্রিং 3..১.২. রিলিজ স্ট্যান্ডেলোন অ্যাপ্লিকেশনটিতে। আমি আমার নির্ভরতাগুলিতে লগ 4j 1.2.17 যুক্ত করেছি এবং এটি মনে হয়, জেবস লগিং লগিংয়ের জন্য সরাসরি লগ 4 জে লগ হয় যদি উপলভ্য হয় এবং স্প্রিং কমন্স লগিং ব্যবহার করে, ডাইনি লগ 4j ব্যবহার করে যদি উপলব্ধ থাকে তবে সমস্ত লগিং লগ 4 জের মাধ্যমে কনফিগার করা যেতে পারে।

এখানে আমার প্রাসঙ্গিক নির্ভরতার তালিকা:

<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: লগব্যাক-ক্লাসিক, ch.qos.logback: লগব্যাক-কোর: 1.0.12)

  2. সম্পূর্ণরূপে নির্ভরতা থেকে log4j libs বাদ দিন

ফলাফল: লগব্যাক থেকে slf4j এর মাধ্যমে হাইবারনেট লগগুলি। অবশ্যই আপনার লগব্যাকের চেয়ে পৃথক লগ প্রয়োগ করতে সক্ষম হওয়া উচিত

কোনও লগ ৪ জ উপস্থিত না রয়েছে তা নিশ্চিত হতে, যুদ্ধের ফাইলগুলির জন্য ক্লাসপথ বা ওয়েব-ইনফ / লিবিতে আপনার লিবিগুলি পরীক্ষা করুন।

অবশ্যই আপনি লগব্যাক.এক্সএমএল লগারে সেট করেছেন যেমন:

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


এই সঠিক সমস্যা ছিল। লগ 4 জে অন্য লাইব্রেরি থেকে ট্রানজিটিভ নির্ভরতা হিসাবে আনা হচ্ছে। এটি বাদ দেওয়া হয়েছে, এবং হাইবারনেট লগিং প্রত্যাশিত লগব্যাক এবং slf4j লগ 4 জ ব্রিজ ব্যবহার করে কাজ শুরু করেছে
পল জেপার্নিক

3

হাইবারনেট ৪.৩-তে কীভাবে নিয়ন্ত্রণ করতে হবে তার কিছু ডকুমেন্টেশন রয়েছে org.jboss.logging:

  • এটি কোনও লগিং সরবরাহকারীর জন্য শ্রেণিকথ অনুসন্ধান করে । এটি লগ 4j অনুসন্ধানের পরে slf4j অনুসন্ধান করে। সুতরাং, তাত্ত্বিকভাবে, আপনার ক্লাসপাথ (ওয়ার) লগ ৪ জে অন্তর্ভুক্ত না করে এবং এতে slf4j এপিআই অন্তর্ভুক্ত নয় এবং একটি ব্যাক-এন্ড কাজ করা উচিত তা নিশ্চিত করে।

  • একটি শেষ অবলম্বন হিসাবে আপনি org.jboss.logging.providerসিস্টেম সম্পত্তি সেট করতে পারেন slf4j


ডকুমেন্টেশনের দাবির সত্ত্বেও org.jboss.loggingলগ 4 জে অনুপস্থিত থাকা এবং এসএলএফ 4 জে উপস্থিত থাকা সত্ত্বেও লগ 4 জে ব্যবহারের চেষ্টা করার জন্য জোর দিয়েছিলেন, ফলস্বরূপ আমার টমক্যাট লগ ফাইলে নিম্নলিখিত বার্তাটির ফলস্বরূপ /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.

আমাকে ডাসঅ্যান্ডারেল অ্যাসমিংগার উত্তরের পরামর্শটি অনুসরণ করতে হয়েছিল এবং 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 ব্যবহার কনফিগার করে। ওপি লগ 4 জে ব্যবহার করতে চায় না; তারা slf4j ব্যবহার করতে চান।
রায়েডওয়াল্ড

1

আমার ওয়েবব্লিক 12 সি এবং লগ 4 জে হাইবারনেট 4 লগিংয়ের কাজ করতে একটি সমস্যা হয়েছিল। সমাধানটি আপনার ওয়েবলজিক-অ্যাপ্লিকেশন.এক্সএমএল-এ নিম্নলিখিত বিষয়বস্তু স্থাপন করা হয়:

<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 ফোল্ডারের লাইব্রেরিতে ব্যবহার করছেন। এর অর্থ এটি যে আপনি যে কোনও কনফিগারেশনকে প্রভাবিত করতে সেট করার আগে প্রিললোড হয়ে যায়। ওয়েবলোগিকের এই সমস্যাটি এড়াতে আপনি অ্যাপ্লিকেশন থেকে লোড করা লাইব্রেরিটি পছন্দ করতে নিজের / এমইটিএ-আইএনএফ কান কানে ফাইললজিক-অ্যাপ্লিকেশন.এক্সএমএল ফাইলটিতে উল্লেখ করতে পারেন। অন্যান্য সার্ভারের ধারকগুলির জন্য একই ধরণের ব্যবস্থা থাকা উচিত। আমার ক্ষেত্রে আমাকে যুক্ত করতে হয়েছিল:

<?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

আপনি কি এই চেষ্টা করেছেন:

- slf4j-log4j12.jar লগ 4 জের ক্ষেত্রে। আরও বিশদ জন্য SLF4J ডকুমেন্টেশন দেখুন। লগ 4j ব্যবহার করার জন্য আপনার ক্লাসপথে একটি লগ 4j.properties ফাইল স্থাপন করতে হবে। একটি উদাহরণ বৈশিষ্ট্য ফাইলটি সিআরসি / ডিরেক্টরিতে হাইবারনেটের সাথে বিতরণ করা হয়

ক্লাসপথে এই জার এবং বৈশিষ্ট্যগুলি বা লগ 4 জ এক্সএমএল যুক্ত করুন


4
এটি হাইবারনেট 3.x ডকুমেন্টেশনের একটি উদ্ধৃতি। আপনি কি ভাবেন যে এটি এখনও হাইবারনেট 4.x এর সাথে কাজ করবে, যা এসএলএফ 4 জে ব্যবহার করে না?
টম অ্যান্ডারসন

যতদূর আমি মনে করি
লগ 4 জে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.