2009-11-23 12 views
12

क्या लॉगऑन का उपयोग करने वाले समय क्षेत्र को निर्दिष्ट करना संभव है? मुझे लॉग फ़ाइल में तारीखों की आवश्यकता है ताकि एप्लिकेशन की तुलना में एक अलग समय क्षेत्र हो। log4j का PatternLayoutSimpleDateFormat का उपयोग करता है। दुर्भाग्यवश पैटर्न स्ट्रिंग के माध्यम से SimpleDateFormat के समय क्षेत्र को नियंत्रित करने का कोई तरीका प्रतीत नहीं होता है (DateFormat में setTimeZone विधि है लेकिन इससे मदद नहीं मिलती है)।log4j की तारीख का समय क्षेत्र निर्दिष्ट करें

मैंने लॉग 4j के स्रोत को देखा और SimpleDateFormatPatternParser.finalizeConverter में instiantiated किया जा रहा है। दुर्भाग्य से समय क्षेत्र सेट करने के लिए DateFormat को पकड़ने का कोई आसान तरीका नहीं है।

उत्तर

16

यदि आप अपने क्लासपाथ पर Log4J अतिरिक्त JAR फ़ाइल का उपयोग करते हैं, तो EnhancedPatternLayout क्लास इस कॉन्फ़िगरेशन विकल्प का समर्थन करता है। this link पर जावाडोक देखें। यह इस तरह से% d पैटर्न घटक के हिस्से के रूप संभाला है:

log4j.appender.stdout.layout.ConversionPattern=%d{}{America/New_York} %p [%c] - %m%n 

आपके पास अतिरिक्त पैकेज here डाउनलोड कर सकते हैं।

+0

लॉगर में मेरे मामले में यह {America/New_York} DEBUG [hi] - hi के रूप में आ रहा है .. मुझे नहीं पता कि यह क्यों काम नहीं कर रहा है –

+1

1.2.16 से यह लॉग 4j का हिस्सा है –

4

उपरोक्त लॉग पैटर्न का सही विचार है लेकिन पूरी तरह से सही नहीं है (आपको लॉग में कोई टाइमस्टैम्प नहीं मिलता है)।
पक्का इस पद्धति का उपयोग करें:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
या
%d{ISO8601}{GMT-5} %p [%c] - %m%n

+0

शायद यह काम करता है एक पुराना संस्करण कोई बात नहीं धन्यवाद! – aditsu

8

मेरे केस ... EnhancedPatternLayout को patternLayout को बदलना होगा। (log4j-1.2.17.jar)

log4j.appender.logfile.layout = org.apache.log4j। EnhancedPatternLayout log4j.appender.logfile.layout.ConversionPattern = [% d {ISO8601} {GMT + 9}]% - 5p -% m% n

1

इसके अलावा, अगर आप सामान्य समय क्षेत्र obtein dinamicaly को whant, आप EnhancedPatternLayout विस्तार कर सकते हैं और विधि के ऊपर लिख "setConversionPattern" इस तरह:

@Override 
public void setConversionPattern(String conversionPattern) { 
    String defaultTimeZoneId = TimeZone.getDefault().getID(); 
    String conversionPatternModif = conversionPattern.replaceAll(
     "\\%d\\{([^\\{\\}]*)\\}([ ]*[^\\{]*)", 
     "%d{$1}{"+defaultTimeZoneId+"}$2"); 

    super.setConversionPattern(conversionPatternModif); 
} 
+0

धन्यवाद, यह मेरे लिए काम करता है :) – toantran

2

यह की तरह कुछ का उपयोग करने के लिए बेहतर है {America/New_York} के बजाय {GMT-5} क्योंकि एक समय क्षेत्र निर्दिष्ट करने के द्वारा एक स्वचालित समायोजन हो जाएगा अगर डेलाइट बचत चालू है तो बनाया गया है। जीएमटी -5 जैसी कुछ निर्दिष्ट करना निश्चित रूप से निर्दिष्ट समय तक जीएमटी समय क्षेत्र को समायोजित करेगा।

संबंधित मुद्दे