Jersey'nin oluşturduğu ve sunucuya gönderdiği gerçek talebi nasıl görebilirim? Belirli bir istekle ilgili sorunlar yaşıyorum ve web sunucusunu çalıştıran kişi tam isteği (başlıklar ve benzeri) görmek istedi.
Jersey'nin oluşturduğu ve sunucuya gönderdiği gerçek talebi nasıl görebilirim? Belirli bir istekle ilgili sorunlar yaşıyorum ve web sunucusunu çalıştıran kişi tam isteği (başlıklar ve benzeri) görmek istedi.
Yanıtlar:
Yalnızca Jersey Client API kullanıyorsanız, LoggingFilter (istemci filtresi) size şu konularda yardımcı olacaktır:
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);
Aksi takdirde, diğer LoggingFilter (kapsayıcı filtresi) kullanarak sunucuda hem isteği hem de yanıtı yeniden günlüğe kaydedebilirsiniz .
addFilteryöntem Jersey 2.x'te mevcut değildir. Bunu şimdi nasıl kullanıyorsun?
Yana Jersey 2.23 , bir var LoggingFeaturesen kullanabilirsiniz. Aşağıdaki biraz basitleştirilmiş bir örnektir, lütfen özelliği de kaydedebileceğinizi unutmayın 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, istek "ve / veya" yanıtın lol günlüğe kaydedildiğini söylüyor. Benim makinemde her ikisi de günlüğe kaydedildi.
@ ivan.cikic'in cevabı Jersey 1.x için. Jersey 2.x'de bunu şu şekilde yapabilirsiniz:
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());
Bu alakasız ama şikayet etmeliyim : Yeni LoggingFiltergerçekten can sıkıcı çünkü sizi Java Util Logging kullanmaya zorluyor. Kaydediciyi kontrol etmeme izin verse daha iyi olur. Tasarımda geriye doğru bir adım gibi görünüyor.
LoggingFilter(Logger logger, boolean PrintEntity), ancak bu bile tanımlama bilgilerini yazdırmıyor.
LoggingFeaturehiçbir şey yazdırmıyor ve LoggingFilteryazdırmıyor ... 🤷♂️
Tüm bu yanıtlar oldukça yakındır, ancak istek ve yanıt gövdesini günlüğe kaydetme ayarlarından yoksundurlar. En azından Jersey 2.30.1 ile ilgili kurumları da dahil olmak üzere talebi ve yanıtı günlüğe kaydetmeyi bu şekilde gerçekleştiriyorum:
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();
Teknik olarak Level.Allve 8192değerleri olabilir null. Ben sadece kısa ve öz olmalarını sağlıyorum.