2012-02-02 26 views
8

के साथ लॉग इन करना चाहता हूं कि लॉग में विशिष्ट टाइमज़ोन की दिनांक प्रविष्टियां होनी चाहिए। log4j.properties में टाइमज़ोन को मजबूर करने का कोई तरीका है?अपाचे लॉग 4j विशिष्ट टाइमज़ोन

अब मैं जेडीके 1.5 का उपयोग कर रहा हूं, जैसा कि आप पहले ही जानते हैं कि जेडीके 1.5 में टाइमज़ोन बग है जिसे जेडीके 1.5 में हटा दिया गया है। जेडीके 1.5 के मामले में यह डिफ़ॉल्ट रूप से "जीएमटी" टाइमज़ोन दिखाता है। मैं अपने विशिष्ट टाइमज़ोन Log4j में कॉन्फ़िगर करना चाहता हूं।

+1

अधिक विशिष्ट, यह कैसे अब दिखता है और आप इसे की तरह लग रहे करने के लिए कैसे करना चाहते हैं? – tartak

+0

@CatalinCiobanu अब यह स्पष्ट है? –

उत्तर

0

लेआउट क्लास और timeZone संपत्ति के रूप में org.apache.log4j.helpers.DateLayout का उपयोग करें।

0

अपने ConversionPattern में date तर्क शामिल करें।

स्थानीय समय क्षेत्र में प्रवेश घटना की तारीख उत्पादन के लिए प्रयोग किया जाता है - PatternLayout documentation:

तारीख से। सार्वभौमिक समय में दिनांक आउटपुट करने के लिए %utcdate पैटर्न का उपयोग करें। दिनांक रूपांतरण विनिर्देश के बाद ब्रेसिज़ के बीच संलग्न दिनांक प्रारूप निर्दिष्ट का पालन किया जा सकता है। उदाहरण के लिए, %date{HH:mm:ss,fff} या %date{dd MMM yyyy HH:mm:ss,fff}। यदि कोई दिनांक प्रारूप विनिर्देशक नहीं दिया गया है तो ISO8601 प्रारूप माना जाता है (Iso8601DateFormatter)।

दिनांक प्रारूप विनिर्देशक ToString की समय पैटर्न स्ट्रिंग के समान वाक्यविन्यास स्वीकार करता है।

बेहतर परिणामों के लिए लॉग 4net दिनांक स्वरूपण का उपयोग करने की अनुशंसा की जाती है। AbsoluteTimeDateFormatter, DateTimeDateFormatter और क्रमशः Iso8601DateFormatter निर्दिष्ट करने के लिए इन्हें "ABSOLUTE", "DATE" और "ISO8601" तारों में से एक का उपयोग करके निर्दिष्ट किया जा सकता है। उदाहरण के लिए, %date{ISO8601} या %date{ABSOLUTE}

ये समर्पित दिनांक प्रारूपक ToString से काफी बेहतर प्रदर्शन करते हैं।

+2

ध्यान दें कि यह .NET के लिए प्रतीत होता है, यह सुनिश्चित नहीं है कि यह जावा पर लागू होता है - या कम से कम मुझे एक समतुल्य नहीं मिल रहा है, मैं अभी भी देख रहा हूं। –

16

यह आपको अपनी लॉग की प्रत्येक पंक्ति में समय क्षेत्र जानकारी देखने के लिए अनुमति देगा:

%d{yyyy-MM-dd/HH:mm:ss.SSS/zzz} 

चाल पैटर्न में 'zzz' java.text.SimpleDateFormat के लिए जावाडोक के अनुसार के बाद से शामिल करने के लिए है (http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html), यह टाइमज़ोन के लिए कोड है। Log4J SimpleDateFormat के समान नियमों का उपयोग करता है। तालिका जहां 'रूपांतरण चरित्र' पत्र 'प' है में पंक्ति के लिए

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

देखो:

Log4J जावाडोक में अधिक अधिक जानकारी के हैं।

+0

यह हमेशा मुझे जेडटी 1.5 में जीएमटी दे देगा, इसलिए मैं अपना विशिष्ट टाइमज़ोन –

+0

ओह चाहता हूं। माफ़ कीजिये। उस स्थिति में आपका समाधान यहां है (एक "अतिरिक्त" जार की आवश्यकता है): http://stackoverflow.com/questions/1785725/specify-time-zone-of-log4js-date –

+0

'पैटर्न Layout' के javadoc के महत्वपूर्ण भाग का उद्धरण : हालांकि मानक जेडीके का हिस्सा, SimpleDateFormat का प्रदर्शन काफी खराब है। बेहतर परिणामों के लिए log4j दिनांक स्वरूपण का उपयोग करने की अनुशंसा की जाती है। इन्हें AbsoluteTimeDateFormat, DateTimeDateFormat और क्रमशः ISO8601DateFormat निर्दिष्ट करने के लिए "ABSOLUTE", "DATE" और "ISO8601" तारों में से एक का उपयोग करके निर्दिष्ट किया जा सकता है। उदाहरण के लिए,% d {ISO8601} या% d {ABSOLUTE}। –

4

Apache Extras™ for Apache log4j™ का उपयोग करने का सबसे अच्छा तरीका है और सामान्य PatternLayout को org.apache.log4j द्वारा प्रतिस्थापित करें।EnhancedPatternLayout निम्नलिखित अगर एक संपत्ति फ़ाइल का उपयोग कर रही है:

//log4j.appender.xxx.layout = org.apache.log4j.PatternLayout 
//Replaced by 
log4j.appender.xxx.layout = org.apache.log4j.EnhancedPatternLayout 

तो फिर तुम जीएमटी प्रारूप में अपने तारीख को प्रदर्शित करने के ConversionPattern में% d {ISO8601} {} जीएमटी बजाय% d उपयोग कर सकते हैं। किसी भी समय क्षेत्र GMT

के बजाय निर्दिष्ट किया जा सकता
1

आप लाइन निम्नलिखित जोड़ सकते हैं

log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n 
संबंधित मुद्दे