سؤال
واعتدت 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؟
نصائح أخرى
حسنا، لم تكن قد أظهرت مدى البرنامج المنفذة. وفيما يلي البرنامج الكامل الذي يظهر خط واحد فقط:
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
ويجب أن أعترف أنني لا نفهم بوضوح ما يحدث، لكنه بالتأكيد حل مشكلتي.