मैं वास्तविक अनुरोध को कैसे देख सकता हूं जो जर्सी सर्वर पर भेजता है और भेजता है? मैं एक विशेष अनुरोध और वेबसर्वर चलाने वाले साथी के साथ पूर्ण अनुरोध (हेडर और इस तरह के साथ) देखने के लिए कह रहा हूं।
मैं वास्तविक अनुरोध को कैसे देख सकता हूं जो जर्सी सर्वर पर भेजता है और भेजता है? मैं एक विशेष अनुरोध और वेबसर्वर चलाने वाले साथी के साथ पूर्ण अनुरोध (हेडर और इस तरह के साथ) देखने के लिए कह रहा हूं।
जवाबों:
यदि आप केवल जर्सी क्लाइंट एपीआई का उपयोग कर रहे हैं, तो लॉगिंगफिल्टर (क्लाइंट फिल्टर) को आपकी मदद करनी चाहिए:
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);
अन्यथा, आप अन्य लॉगिंगफिल्टर (कंटेनर फिल्टर) का उपयोग करके सर्वर पर अनुरोध और प्रतिक्रिया दोनों को फिर से लॉग इन कर सकते हैं ।
addFilterविधि जर्सी 2.x में मौजूद नहीं है अब आप इसका उपयोग कैसे करते हैं?
जर्सी 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कहना है कि अनुरोध "और / या" प्रतिक्रिया लॉग योग्य है। मेरी मशीन पर, दोनों लॉग इन हैं।
@ 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वास्तव में कष्टप्रद है क्योंकि यह आपको जावा यूटिल लॉगिंग का उपयोग करने के लिए मजबूर करता है। यह बेहतर होगा कि यह मुझे लकड़हारे पर नियंत्रण दे। डिजाइन में एक कदम पीछे की तरह लगता है।
LoggingFilter(Logger logger, boolean PrintEntity)कंस्ट्रक्टर का उपयोग किया है , लेकिन यहां तक कि कुकीज़ को प्रिंट नहीं करता है।
LoggingFeatureभी प्रिंट नहीं LoggingFilterकरता है और प्रिंट करता है ... reason♂️ Fer
ये सभी उत्तर बहुत करीब हैं, लेकिन उनके पास अनुरोध और प्रतिक्रिया निकाय लॉग करने के लिए सेटिंग की कमी है। कम से कम जर्सी 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। मैं उन्हें संक्षिप्त करने के लिए यहां प्रदान करता हूं।