2013-03-15 17 views
5

Sono nuovo di log4j e sto cercando di usarlo per capire meglio perché la mia risorsa fornisce un'intestazione 415 Media Type Not Supported.Come utilizzare log4j per vedere in Jersey

sto usando il seguente:

log4j.rootCategory=WARN, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c:%L - %m%n 

log4j.category.com.sun.jersey=DEBUG,stdout 

Questo sembra come dovrebbe funzionare, ma sto mostrando nulla nella console circa il POST raggiungere questa applicazione. So che sta raggiungendo l'applicazione perché se spengo l'applicazione, il POSTer lancia una "connessione rifiutata" durante il tentativo di POST.

+0

Vedi altre informazioni di registrazione? Non sei sicuro del tuo problema di registrazione ma il tuo problema con Jersey è molto probabile che nella tua richiesta manchi l'header di tipo content o content e il tuo servizio ne richieda uno specifico. – cjstehno

+0

No, non vedo nulla sulla richiesta. Ecco perché sto cercando di abilitare la registrazione per questo. : - \ – Webnet

risposta

-4

non ho potuto ottenere la registrazione per lavorare, ma sono stato in grado di determinare come ottenere il ContentType che è quello che mi serviva . Ho dovuto aggiungere questo per la mia classe ...

@Context 
UriInfo uriInfo; 

@PostConstruct 
public void myfunc() { 
    if (uriInfo == null) { //breakpoint on this line, so I can see what uriInfo is 

    } 
} 
+7

Questo non risponde alla domanda "Come usare log4j per vedere in Jersey?" in ogni modo. – fnt

8

Ho paura che non sia così semplice come aggiungere i pacchetti Jersey alla configurazione di Log4J. Jersey non usa Log4J internamente; invece utilizza Java logging.

Se si preferisce lavorare con Log4J, l'opzione è configurare la registrazione Java per utilizzare SLF4JBridgeHandler come gestore di registrazione.

genere questo viene fatto specificando un file di proprietà di registrazione tramite proprietà JVM, e aggiungendo i gestori per le proprietà del file, in questo modo:

  1. specificare il file delle proprietà di registrazione

    -Djava.util.logging.config.file=/path/to/logging.properties

  2. aggiungere SLF4JBridgeHandler come gestore di registrazione nel file logging.properties

    handlers=org.slf4j.bridge.SLF4JBridgeHandler

SLF4J può quindi legarsi a Log4J, e quindi è possibile utilizzare il log4j.properties come al solito per specificare il livello di registrazione per le classi Jersey.

Per inciso, il mio consiglio - se si sta solo facendo questo per il debugging rapido-and-dirty - è a uno:

  1. collegare un debugger per l'applicazione (ammesso che abbiate la codice sorgente dell'applicazione);

  2. o lavorare direttamente con la registrazione Java. Per configure Java logging to output to a file, aggiungere il seguente al file logging.properties come specificato in precedenza -

    com.sun.jersey.level=DEBUG 
    com.sun.jersey.handlers=java.util.logging.FileHandler 
    java.util.logging.FileHandler.pattern=/path/to/debugging.log 
    java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
+0

Grazie per il feedback. Ho solo abilitato log4j perché pensavo che avrebbe offerto la possibilità di eseguire il debug della maglia meglio. Come posso visualizzare maggiori dettagli sulla richiesta senza utilizzare log4j? La mia preoccupazione è che attualmente NOTHING si presenti nella console dell'applicazione da qualsiasi tipo di registrazione quando il sistema lancia l'intestazione 415. – Webnet

+0

Ho un debugger allegato e non mostra nulla. Pensavo che log4j potesse fornire più opzioni di debug/logging. – Webnet

+0

Ho aggiornato la mia risposta come sospettavo che volessi fare un po 'di debug rapido e sporco, nel qual caso basta lavorare direttamente con la registrazione Java. – pestrella

0

si può vedere sul here è gestito è necessario configurare le

  • web.xml
  • log4j.properties
  • Log4JInitServlet.java
  • Log4JTestServlet.java
2

È possibile utilizzare JUL to SLF4J Bridge per questo primo aggiungerlo al classpath. È possibile utilizzare questo se si utilizza Maven:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jul-to-slf4j</artifactId> 
    <version>1.7.5</version> 
</dependency> 

Aggiungi quelle linee a un blocco di inizializzazione statica o nel metodo principale:

LogManager.getLogManager().reset(); 
SLF4JBridgeHandler.install(); 

Ora è possibile controllare i log jersey dal file log4j.properties:

log4j.category.org.glassfish.jersey=WARN,stdout 
+0

+1 per l'inizializzatore statico per la configurazione di SLF4JBridgeHandler che nel nostro caso significa meno parti mobili –

Problemi correlati