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 .
addFilter
yöntem Jersey 2.x'te mevcut değildir. Bunu şimdi nasıl kullanıyorsun?
Yana Jersey 2.23 , bir var LoggingFeature
sen 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 LoggingFilter
gerç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.
LoggingFeature
hiçbir şey yazdırmıyor ve LoggingFilter
yazdı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.All
ve 8192
değerleri olabilir null
. Ben sadece kısa ve öz olmalarını sağlıyorum.