2014-09-11 12 views
6

मैं अपने मामले में, जहां सरल ActiveWeb आवेदन जेट्टी के तहत नहीं चल रहा है डिबग करने के लिए कोशिश कर रहा हूँ। यह बर्ताव करता है के रूप में अगर कोई अनुरोध प्रक्रिया के लिए किसी भी कक्षा में मौजूद हैं और वापसी त्रुटि 404.जेटी में लॉगिंग कैसे सक्षम करें?

सवाल ActiveWeb के बारे में नहीं है। यह जेटी के बारे में है। कैसे पता लगाना है कि, कुछ वेब एप्लिकेशन होने के कारण, जेटी को शौकीन एनोटेटेड क्लास है और इसे HTTP अनुरोध पर निष्पादित कर देगा?

वर्तमान में मैं जेट्टी डाउनलोड किया है और यह काम करता है। दुर्भाग्य से, यह कोई लॉगिंग नहीं करता है। कुछ भी नहीं stdout या stderr में प्रदर्शित किया जाता है और कोई फ़ाइलें इस समय logs उपनिर्देशिका, जब 404 त्रुटि रिटर्न में दिखाई देते हैं।

कैसे घाट में लॉगिंग सक्षम करने?

यहां प्रलेखन http://www.eclipse.org/jetty/documentation/current/configuring-logging.html और यहां http://www.eclipse.org/jetty/documentation/current/configuring-jetty-request-logs.html स्पष्ट और विवादास्पद नहीं है।

उदाहरण के लिए, पहले पृष्ठ जेट्टी किसी भी जावा loggin ढांचे का उपयोग नहीं करता है कहते हैं, लेकिन यह भी एक का चयन करने के लिए एक आवश्यकता है। दूसरा पृष्ठ कॉन्फ़िगरेशन का कुछ उदाहरण प्रदान करता है, लेकिन यह नहीं कहता है, जहां यह कोड रखा जाना चाहिए।

उत्तर

19

के रूप में शब्द "जावा लॉगिंग फ्रेमवर्क" अक्सर java.util.logging, slf4j, logback, log4j, कॉमन्स-प्रवेश, logkit जैसे आधुनिक प्रवेश चौखटे साथ जुड़ा हुआ है प्रलेखन, सही है, आदि

यह सही है, जेटी उन में से किसी का भी उपयोग नहीं करता है।

जेटी लॉगिंग मानकीकृत लॉगिंग ढांचे पर उन प्रयासों के सभी से पूर्व निर्धारित करता है। (जेटी, और इसकी लॉगिंग परत 1 99 5 में बनाई गई थी)

यह जेटी लॉगिंग (और is documented प्रलेखन साइट पर) सेटअप और कॉन्फ़िगरेशन के संबंध में करता है।

डिफ़ॉल्ट व्यवहार:

  • slf4j तो अपने classpath में मौजूद है, यह Slf4jLog हैंडलर का उपयोग कर संभाल करने slf4j करने के लिए लॉगिंग घटनाओं फेंकना होगा।
  • StdErrLog पर फ़ॉलबैक, System.err पर उत्सर्जित।

कॉन्फ़िगर करें:

  • प्रवेश कार्यान्वयन आप उपयोग करना चाहते हैं निर्दिष्ट करें। विकल्प हैं:

यह 3 अलग अलग तरीकों

  1. में पूरा किया जा सकता लॉगिंग impl
  2. स्थापित करने के लिए एक प्रणाली का उपयोग करते हुए संपत्ति
# 3 different options 
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog 
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog 
-Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.JavaUtilLog 
  1. classpath से पाया/विन्यास jetty-logging.properties स्वयं का उपयोग करता है।

Example from jetty project itself:

# Configure for System.err output 
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog 
# Configure StdErrLog to log all jetty namespace at default of WARN or above 
org.eclipse.jetty.LEVEL=WARN 
# Configure StdErrLog to log websocket specific namespace at DEBUG or above 
org.eclipse.jetty.websocket.LEVEL=DEBUG 
  1. स्थापित करने के लिए Log.setLog(Logger)

यह

import org.eclipse.jetty.util.log.Log; 
import org.eclipse.jetty.util.log.StdErrLog; 

Log.setLog(new StdErrLog()); 

का उपयोग करने वालों के लिए विशेष रूप से उपयोगी है कोड का उपयोग करना सलाह और नोट्स:

आपके जेटी सर्वर स्टार्टअप का आउटपुट आपको लॉगिंग कार्यान्वयन के बारे में संकेत देगा।

सामान्य/डिफ़ॉल्ट व्यवहार:

2014-09-11 10:48:38.726:INFO::main: Logging initialized @378ms 
2014-09-11 10:48:39.067:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/Users/joakim/Code/Jetty/distros/jetty-distribution-9.2.1.v20140609/demo-base/webapps/] at interval 1 

सूचना है कि यह या तो कोई नाम स्थान घोषणा, या इसके उत्पादन में भारी संक्षिप्त नाम स्थान है। यह मुझे बताता है कि StdErrLog उपयोग में है।

तो slf4j उपयोग में है:

10:50:18.871 [main] INFO org.eclipse.jetty.util.log - Logging initialized @352ms 
10:50:19.102 [main] INFO o.e.j.d.p.ScanningAppProvider - Deployment monitor [file:/Users/joakim/Code/Jetty/distros/jetty-distribution-9.2.1.v20140609/demo-base/webapps/] at interval 1 

यह slf4j के लिए एक डिफ़ॉल्ट Console appender उत्पादन होता है ->logback। यहां समग्र संरचना बहुत अलग है कि StdErrLog क्या उत्पादन करता है, इसलिए अब मैं बता सकता हूं कि जेटी Slf4jLog कार्यान्वयन के माध्यम से उत्सर्जित हो रही है।

+0

ग्रेट उत्तर, लेकिन इन सभी को आजमाने के बाद भी मैं डीबग लॉग संदेशों को देखने में असमर्थ हूं। मैंने logger.setDebugEnabled (true) का उपयोग करके डीबग सेट करने का प्रयास किया, लेकिन जब मैं 'logger.debug ("कुछ संदेश", नया अपवाद ") करता हूं, मुझे कोई आउटपुट नहीं मिलता है। जब मैं जानकारी() या चेतावनी() का उपयोग करता हूं हालांकि। –

+1

लॉगिंग स्तरों का कॉन्फ़िगरेशन आपके द्वारा चुने गए लॉगर कार्यान्वयन द्वारा निर्धारित किया जाता है। StdErrLog को अपने गुणों को 'जेटी-लॉगिंग.प्रोपर्टीज' में रखा जाता है। java.util.logging के साथ पूरी तरह से java.util.logging में किया जाता है, slf4j के साथ, आपके द्वारा चुने गए चुने गए slf4j कार्यान्वयन (जैसे कि slf4j-log12 का मतलब होगा कि आपका log4j.xml इसे नियंत्रित करता है) आदि ... –

+1

slf4j काम करने के लिए lib फ़ोल्डर में उचित जार जोड़ना। मेरी जेटी 9.3.8 में केवल sfl4j-api है और Slf4jLog दस्तावेज़ बताता है कि डिफ़ॉल्ट रूप से NOPlogger का उपयोग किया जाता है। –

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