জার্সি: আসল অনুরোধটি মুদ্রণ করুন


88

জার্সি সার্ভারে উত্পন্ন এবং প্রেরণকারী আসল অনুরোধটি আমি কীভাবে দেখতে পারি? আমার একটি বিশেষ অনুরোধ এবং ওয়েব সার্ভার চালানো সহকারীর সম্পূর্ণ অনুরোধটি (শিরোনাম এবং এর সাথে) দেখার জন্য জিজ্ঞাসা করে আমার সমস্যা হচ্ছে।


4
সার্ভার সাইড এ লগিং জন্য নিম্নলিখিত পোস্টে দেখুন: [সার্ভার এ জার্সি লগ পেতে কিভাবে?] [1] [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);

অন্যথায়, আপনি আবার অন্য লগিংফিল্টার (ধারক ফিল্টার) ব্যবহার করে সার্ভারে অনুরোধ এবং প্রতিক্রিয়া উভয়ই লগ করতে পারেন ।


4
এই addFilterপদ্ধতিটি জার্সি ২.x এ বিদ্যমান নেই। আপনি এখন এটি কীভাবে ব্যবহার করবেন?
ড্যানিয়েল কাপলান

4
JAX-RS 2.x কার্যকারিতা সরবরাহ করে যা জার্সি 1.x স্বত্বাধিকারী ক্লায়েন্ট API এর সমতুল্য। আরও বিশদ: jersey.java.net/docamentation/latest/…
ivan.cikic

লগ আউটপুট কাস্টমাইজ আগ্রহী মানুষের জন্য, তারা তাদের নিজস্ব LoggingFilter তৈরি করতে পারেন stackoverflow.com/questions/30187514/...
nacho4d

55

জার্সি ২.২৩ থেকে যেহেতু 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();

জাভাডক LoggingFeatureবলেছেন যে অনুরোধটি "এবং / অথবা" প্রতিক্রিয়াটি লোগুল। আমার মেশিনে, উভয়ই লগড।


এটি জার্সি ২.২৫ এর জন্য দুর্দান্ত কাজ করে তবে ২.7 যা আমি ব্যবহার করছি তাতে "লগিং" প্যাকেজটি আরগি-ক্লাসফিশ.জার্সি কোডের মধ্যে আর নেই: জার্সি-সাধারণ। আপনি কি জানেন যে এটি কোন প্যাকেজে ২.7 এ স্থানান্তরিত হয়েছিল?
টিম

এটি অনুরোধ বা প্রতিক্রিয়াটির মুদ্রণ করে না। এটি কেবল শিরোনামগুলি দেখায়
ডেভিড ব্রসার্ড

4
এটি নিয়ন্ত্রণ করতে কনস্ট্রাক্টর প্যারামিটার হিসাবে @ ডেভিডব্রসার্ড org.glassfish.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY ব্যবহার করুন।
এক্সেলডাব্লু

51

@ আইভান.সাইকিকের জার্সি ১.x এর উত্তর। আপনি এটি জার্সি ২.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কারণ এটি জাভা util লগিং ব্যবহার করতে বাধ্য করে সত্যিই বিরক্তিকর। এটি যদি আমাকে লগারের উপর নিয়ন্ত্রণ দেয় তবে ভাল হবে। নকশায় পিছনের দিকের মতো মনে হচ্ছে।


4
আমি জানি এটি একটি পুরানো উত্তর, তবে আমার একটি প্রশ্ন আছে - আপনি কীভাবে একটি অনুরোধে থাকা সমস্ত তথ্য মুদ্রণের জন্য লগারটি পাবেন তা জানেন? বিশেষত, কুকিজ। আমি LoggingFilter(Logger logger, boolean PrintEntity)কনস্ট্রাক্টর ব্যবহার করেছি , তবে এটি কুকিজ মুদ্রণ করে না।
বিকেইসার

4
লগিংফিল্টার এখন অবচয় করা হয়েছে। লগিংফিশারের মার্টিনের উত্তরটি আপনার ব্যবহার করা উচিত। এটি বিভিন্ন পরিমাণের বিশদ বিবরণ প্রিন্ট করতে ভার্বোসিটি এনামকে সমর্থন করে। এটিতে শিরোনামগুলি মুদ্রণ করা উচিত, এতে কুকিজ অন্তর্ভুক্ত থাকতে হবে।
ড্যান হার্ডিকার

কোনও কারণে LoggingFeatureকোনও কিছুই মুদ্রণ করে না এবং LoggingFilterমুদ্রণও করে ... ♂️‍♂️
ফেরান মেলিনঞ্চ

0

এই সমস্ত উত্তর বেশ কাছাকাছি কিন্তু অনুরোধ এবং প্রতিক্রিয়া বডি লগ ইন করার সেটিংয়ের অভাব রয়েছে। কমপক্ষে জার্সির ২.৩০.১. এর সাথে আমি অনুরোধ এবং প্রতিক্রিয়াটি তাদের নিজ নিজ সংস্থাসহ লগইন করে শেষ করব:

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। আমি এখানে সংক্ষিপ্ত হতে এখানে তাদের সরবরাহ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.