Chciałbym wiedzieć, jak skonfigurować Dropwizard do rejestrowania odpowiedzi JSON.Jak rejestrować odpowiedzi JSON w Dropwizard (Jersey)
Odpowiedz
W dropwizard 0.8.1 (również próbował w 0.9.0-SNAPSHOT), dodać do Application.run(...)
:
import java.util.logging.Logger;
import org.glassfish.jersey.filter.LoggingFilter;
...
public void run(MyApplicationConfiguration conf, Environment env) throws Exception {
// do your stuff and then add LoggingFilter
env.jersey().register(new LoggingFilter(
Logger.getLogger(LoggingFilter.class.getName()),
true)
);
}
Aby skonfigurować rejestrator, dodać w pliku konfiguracyjnym (np conf.yml
):
logging:
loggers:
org.glassfish.jersey.filter.LoggingFilter: INFO
W podklasie serwisowym (ex HelloWorldService), w metodzie run, dodać:
environment.setJerseyProperty(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, LoggingFilter.class.getName());
environment.setJerseyProperty(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, LoggingFilter.class.getName());
a następnie upewnij się, że com.sun.jersey.api.container.filter.LoggingFilter (lub dowolny pakiet rodzicem) jest skonfigurowany przynajmniej na poziomie log INFO, na przykład:
logging:
loggers:
"com.sun.jersey.api.container.filter.LoggingFilter": INFO
Z jakiegoś powodu program rejestrujący nie wydaje się konfigurować poziomu? –
Należy pamiętać, że było to w Dropwizard 0.6.x dni. W wersji 0.7.0 mogło się to zmienić. Nigdy nie zbudowałem nic z Dropwizard 0.7.0 i odeszłem od tego, więc nie jestem pewien. Przepraszam. –
LoggingFilter wewnętrznie wywołuje logger.info (...) Oto fragment: prywatny dziennik pustych danych (ostateczny StringBuilder b) { , jeśli (logger! = Null) { logger.info (b.toString()); } } –
W dropwizard 0.7.0 poprawnej składni, aby umożliwić rejestrowanie żądanie i odpowiedź brzmi:
environment.jersey().property(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, LoggingFilter.class.getName());
environment.jersey().property(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, LoggingFilter.class.getName());
odpowiedzi są nieco przestarzałe, to jak to należy zrobić w nowszych wersjach:
env.jersey().register(new LoggingFeature(logger, LoggingFeature.Verbosity.PAYLOAD_ANY));
Gdzie logger
jest java.util.logging.Logger
Logging Filtr jest przestarzałe, więc powinniśmy używać LoggingFeature.
Niestety nie mogłem dostać pracy z odpowiedzią @Kliknij upvote dnia
env.jersey().register(new LoggingFeature(logger, LoggingFeature.Verbosity.PAYLOAD_ANY));
następujący kod pracował dla mnie. Odpowiadają różnym konstruktorom.
environment.jersey().register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, LoggingFeature.DEFAULT_MAX_ENTITY_SIZE));
Oto konstruktory w obu przypadkach.
public LoggingFeature(Logger logger, Integer maxEntitySize) {
this(logger, (Level)null, DEFAULT_VERBOSITY, maxEntitySize);
}
public LoggingFeature(Logger logger, Level level, LoggingFeature.Verbosity verbosity, Integer maxEntitySize) {
this.filterLogger = logger;
this.level = level;
this.verbosity = verbosity;
this.maxEntitySize = maxEntitySize;
}
Ustawienie poziomu działa.
LoggingFilter jest przestarzałe. Zaktualizuj odpowiedź za pomocą LoggingFeatuers – Ramesh