سؤال

واعتدت log4j في برنامج جافا. I تهيئة عنها بما يلي:

BasicConfigurator.configure(); // logger configuration
try {
     logger.setLevel(Level.DEBUG);
} catch (Exception e) {
     System.out.println("Logfile not found");
}

ولكن، أثناء تنفيذ البرنامج أحصل على 3 بيانات السجل بدلا من واحد. على سبيل المثال،

3 lines 
1047 [main] INFO ibis.Preproc.Ratings  - Added AS TIMEZONE to tZones[0] = GMT-12:00
1047 [main] INFO ibis.Preproc.Ratings  - Added AS TIMEZONE to tZones[0] = GMT-12:00
1047 [main] INFO ibis.Preproc.Ratings  - Added AS TIMEZONE to tZones[0] = GMT-12:00

وخط بدلا من واحدة

1047 [main] INFO ibis.Preproc.Ratings  - Added AS TIMEZONE to tZones[0] = GMT-12:00

هل هناك أي تكوينات إضافية يتعين القيام به لlog4j لتجنب هذا؟

هل كانت مفيدة؟

المحلول

ولقد شهدت نفس السلوك، واتضح أن Log4J تم تكوين أكثر من مرة. باستخدام BasicConfigurator، ولكن أيضا مع ملف log4j.xml كنت قد نسيت. هل يمكن أن تكون هناك تكوين Log4J إضافي في مكان ما على CLASSPATH؟

نصائح أخرى

وعلى الأرجح أن يكون لديك أكثر من واحد Appenders. رؤية log4j دليل (القسم Appenders وتخطيط):

<اقتباس فقرة>   

وسيحال كل طلب تسجيل تمكين ومسجل بالنظر إلى كل appenders في هذا مسجل وكذلك appenders أعلى في التسلسل الهرمي.

ويمكنك محاولة تعيين إشارة الجمع إلى false.

حسنا، لم تكن قد أظهرت مدى البرنامج المنفذة. وفيما يلي البرنامج الكامل الذي يظهر خط واحد فقط:

import org.apache.log4j.*;

public class Test
{
    public static void main(String[] args)
    {
        BasicConfigurator.configure(); // logger configuration
        Logger logger = Logger.getLogger(Test.class);
        logger.setLevel(Level.DEBUG);
        logger.info("Hello");
    }
}

هل من الممكن أن التعليمات البرمجية حقا يعمل ثلاث مرات؟

في حالتي، كنت إضافة appender جديد في كل مرة اتصلت BasicConfigurator.configure ().

وأنا حلها الإعادة التكوين:

BasicConfigurator.resetConfiguration() //reset first
BasicConfigurator.configure() // then configure

ويجب أن أعترف أنني لا نفهم بوضوح ما يحدث، لكنه بالتأكيد حل مشكلتي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top