जर्सी: वास्तविक अनुरोध को प्रिंट करें


88

मैं वास्तविक अनुरोध को कैसे देख सकता हूं जो जर्सी सर्वर पर भेजता है और भेजता है? मैं एक विशेष अनुरोध और वेबसर्वर चलाने वाले साथी के साथ पूर्ण अनुरोध (हेडर और इस तरह के साथ) देखने के लिए कह रहा हूं।


3
सर्वर साइड पर लॉग इन करने के लिए निम्नलिखित पोस्ट देखें: [सर्वर पर जर्सी लॉग कैसे प्राप्त करें?] [1] [१]: stackoverflow.com/questions/2332515/…
eeezyy

जवाबों:


100

यदि आप केवल जर्सी क्लाइंट एपीआई का उपयोग कर रहे हैं, तो लॉगिंगफिल्टर (क्लाइंट फिल्टर) को आपकी मदद करनी चाहिए:

Client client = Client.create();
client.addFilter(new LoggingFilter(System.out));
WebResource webResource = client.resource("http://localhost:9998/");
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON)
                                         .get(ClientResponse.class);

अन्यथा, आप अन्य लॉगिंगफिल्टर (कंटेनर फिल्टर) का उपयोग करके सर्वर पर अनुरोध और प्रतिक्रिया दोनों को फिर से लॉग इन कर सकते हैं ।


5
यह addFilterविधि जर्सी 2.x में मौजूद नहीं है अब आप इसका उपयोग कैसे करते हैं?
डेनियल कपलान

2
JAX-RS 2.x जर्सी 1.x मालिकाना क्लाइंट API के बराबर कार्यक्षमता प्रदान करता है। अधिक जानकारी: jersey.java.net/documentation/latest/…
ivan.cikic

लॉग उत्पादन को अनुकूलित में रुचि रखने वाले लोगों के लिए, वे अपने स्वयं के LoggingFilter बना सकते हैं stackoverflow.com/questions/30187514/...
nacho4d

55

जर्सी 2.23 के बाद से , LoggingFeatureआप उपयोग कर सकते हैं। निम्नलिखित थोड़ा सरल उदाहरण है, कृपया ध्यान दें कि आप इस सुविधा को भी पंजीकृत कर सकते हैं WebTarget

Logger logger = Logger.getLogger(getClass().getName());

Feature feature = new LoggingFeature(logger, Level.INFO, null, null);

Client client = ClientBuilder.newBuilder()
        .register(feature)
        .build();

Response response = client.target("https://www.google.com")
        .queryParam("q", "Hello, World!")
        .request().get();

JavaDoc का LoggingFeatureकहना है कि अनुरोध "और / या" प्रतिक्रिया लॉग योग्य है। मेरी मशीन पर, दोनों लॉग इन हैं।


यह जर्सी 2.25 के लिए बहुत अच्छा काम करता है, लेकिन 2.7 में जो मैं उपयोग कर रहा हूं, "लॉगिंग" पैकेज अब org.glassfish.jersey.core: जर्सी-कॉमन के भीतर स्थित नहीं है। क्या आप जानते हैं कि 2.7 में किस पैकेज को स्थानांतरित किया गया था?
टिम

यह अनुरोध या प्रतिक्रिया के मुख्य भाग को मुद्रित नहीं करता है। यह केवल हेडर्स को दिखाता है
डेविड ब्रॉसार्ड

2
@DavidBrossard इसे नियंत्रित करने के लिए एक निर्माता पैरामीटर के रूप में org.glassfish.jersey.logging.oggingFeature.Verbosity.PAYLOAD_ANY का उपयोग करें।
एक्सलव्यू

51

@ ivan.cikic का उत्तर जर्सी 1.x के लिए है। यहाँ आप इसे जर्सी 2.x में कैसे करते हैं:

import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.filter.LoggingFilter;
import org.json.JSONException;
import org.json.JSONObject;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;

...

        ClientConfig config = new ClientConfig();

        Client client = ClientBuilder.newClient(config);
        client.register(new LoggingFilter());

यह अप्रासंगिक है लेकिन मुझे सिर्फ शिकायत करनी है: नया LoggingFilterवास्तव में कष्टप्रद है क्योंकि यह आपको जावा यूटिल लॉगिंग का उपयोग करने के लिए मजबूर करता है। यह बेहतर होगा कि यह मुझे लकड़हारे पर नियंत्रण दे। डिजाइन में एक कदम पीछे की तरह लगता है।


3
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन मेरा एक सवाल है - क्या आप जानते हैं कि एक अनुरोध में निहित सभी जानकारी को प्रिंट करने के लिए लकड़हारा कैसे मिलता है? विशेष रूप से, कुकीज़। मैंने LoggingFilter(Logger logger, boolean PrintEntity)कंस्ट्रक्टर का उपयोग किया है , लेकिन यहां तक ​​कि कुकीज़ को प्रिंट नहीं करता है।
15

2
LoggingFilter अब पदावनत हो गया है। आपको लॉगिंगफ्रीचर के मार्टिन के उत्तर का उपयोग करना चाहिए। यह वर्बोसिटी एनुम को विस्तार की एक अलग मात्रा का प्रिंट आउट करने के लिए भी समर्थन करता है। इसे हेडर प्रिंट करना चाहिए, जिसमें कुकीज़ शामिल होनी चाहिए।
दान हार्डिकर

किसी कारण के लिए कुछ LoggingFeatureभी प्रिंट नहीं LoggingFilterकरता है और प्रिंट करता है ... reason♂️ Fer
फेरन मायलिनच

0

ये सभी उत्तर बहुत करीब हैं, लेकिन उनके पास अनुरोध और प्रतिक्रिया निकाय लॉग करने के लिए सेटिंग की कमी है। कम से कम जर्सी 2.30.1 के साथ यह है कि मैं उनके संबंधित निकायों सहित अनुरोध और प्रतिक्रिया को लॉग इन करने में कैसे पूरा करता हूं:

import javax.ws.rs.client.ClientBuilder;
import org.glassfish.jersey.logging.LoggingFeature;
import java.util.logging.Level;
import java.util.logging.Logger;

Logger logger = Logger.getLogger("LoggingFeature");
logger.setLevel(Level.ALL);
ClientBuilder.newClient()
  .target("https://www.example.com")
  .register(new LoggingFeature(
    logger,
    Level.ALL,
    LoggingFeature.Verbosity.PAYLOAD_ANY,
    8192))
  .request()
  .get();

तकनीकी रूप से Level.Allऔर 8192मूल्य हो सकते हैं null। मैं उन्हें संक्षिप्त करने के लिए यहां प्रदान करता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.