Log4j 1.2 - 2.17.2 ब्रिज और लेगेसी कॉन्फ़िगरेशन
हाल की ज़ीरो-डे log4j2 कमजोरियों ने जावा की दुनिया में काफी हलचल मचा दी है। निश्चित रूप से, सॉफ्टवेयर कंपनियों ने इस बात में अधिक रुचि लेना शुरू कर दिया है कि वे अपने उत्पादों में किन डिपेंडेंसीज़ का उपयोग कर रहे हैं। वर्तमान में, हम अब log4j के दो सुरक्षित संस्करणों, अर्थात् 2.17.1 और 2.17.2 का आनंद ले सकते हैं। फिर भी, कुछ लेगेसी उत्पाद अभी भी log4j के संस्करण 1.2 का उपयोग करते हैं, जो 2015 में EOL (एंड-ऑफ-लाइफ) हो गया था। इससे भी बढ़कर, कुछ तो slf4j फैकेड का भी उपयोग नहीं करते हैं।
सुरक्षा पैचिंग की प्रक्रिया में, आप 1.2 को reload4j लाइब्रेरी से बदलने का विकल्प चुन सकते हैं जिसमें महत्वपूर्ण बग्स के लिए पैच किए गए समान क्लास होते हैं। हालांकि, सबसे सम्मानजनक तरीका log4j2 पर पूरी तरह से माइग्रेट करना है। तीसरा विकल्प बीच का रास्ता अपनाना है और log4j-1.2-api ब्रिज का उपयोग करना है जो संस्करण 2 से कोर के साथ जुड़ने वाले पुराने API को एक्सपोज़ करता है।

API के अलावा, log4j2 ने पुराने कॉन्फ़िगरेशन के लिए 2.13.3 के रूप में जल्दी समर्थन पेश किया। आपको सावधान रहना होगा, क्योंकि हर कॉन्फ़िगरेशन आइटम पूरी तरह से समर्थित नहीं था। विशेष रूप से सच है जब कस्टम अपेंडर्स जैसे apache-log4j-extras के साथ जोड़ा जाता है (जिसमें, वैसे, 1.2 से कक्षाओं का कुछ सबसेट होता है, जिससे इसका उपयोग कुछ हद तक संदिग्ध हो जाता है)।
ध्यान दें: 2.18 में apache-extras से अधिक कॉन्फ़िगरेशन तत्वों का समर्थन करने के लिए कुछ आशाजनक सुधार पेश किए जाने हैं जैसे org.apache.log4j.
rolling.RollingFileAppender ।
इसे ध्यान में रखते हुए, आप या तो कॉन्फ़िगरेशन को अपग्रेड कर सकते हैं या पुराने को फिर से उपयोग करने की उम्मीद कर सकते हैं यदि यह पूरी तरह से समर्थित है। एक बात ध्यान देने योग्य है कि 2.17.1 की तुलना में 2.17.2 में लागू किए गए सुधार हैं। इससे पहले, ब्रिज के माध्यम से कॉन्फ़िगरेशन को प्रोग्रामेटिक रूप से लोड करने का तरीका एक नो-ऑप था। 2.17.2, कई सुधारों के अलावा, इस व्यवहार को भी बदलता है।
यदि आपके पास अभी भी कुछ कोड है जो 1.2 API का उपयोग करके कॉन्फ़िग लोड करता है, उदाहरण के लिए, इस तरह:
DOMConfigurator.configure(filename);
DOMConfigurator.configureAndWatch(configFilename, delay);
आपको कुछ दुर्भाग्यपूर्ण त्रुटियों का सामना करना पड़ सकता है। जैसा कि माइग्रेशन डॉक्स में उल्लेख किया गया है, इसकी अनुमति नहीं है, लेकिन 2.17.1 तक, इसका कोई नकारात्मक प्रभाव नहीं था। 2.17.2 में, यह 1.x कॉन्फ़िगरेशन को लोड करने का प्रयास करेगा, यदि आप इस इंटरफ़ेस का उपयोग करते हैं तो अपग्रेड के लिए आपके दृष्टिकोण को प्रभावित करेगा:
public class DOMConfigurator {
//2.17.1:
public static void configureAndWatch(final String configFilename, final long delay) {
}
//2.17.2:
public static void configureAndWatch(final String fileName, final long delay) {
XMLWatchdog xdog = new XMLWatchdog(fileName);
xdog.setDelay(delay);
xdog.start();
}
//...
}
जब सिस्टम प्रॉपर्टीज़ की बात आती है, तो ब्रिज का उपयोग करते समय log4j.configurationFile
प्रॉपर्टी, जिसे log4j2 से जाना जाता है, कॉन्फ़िगरेशन का पसंदीदा स्रोत है। आप एक ही समय में लेगेसी 1.x log4j.configuration
प्रॉपर्टी का उपयोग कर सकते हैं और आसानी से नए प्रारूप में संक्रमण कर सकते हैं।