2010-07-01 15 views
11

Sono nuovo sui contenitori Servlet e ho creato un'applicazione Web utilizzando Tomcat 6.0.26. Ho "TODO: log" sparsi nel mio codice. Vedo esiste:.Registrazione servlet Tomcat

myServlet.getServletContext() log()

che sembra scrivere in un file con prefisso 'localhost' nella Tomcat directory '/ log'. Non ho bisogno di alcuna funzionalità di registrazione avanzata, ma mi piacerebbe una data, l'ora, il messaggio e la traccia dello stack al minimo. Inoltre, ho creato alcune classi utilizzate dai miei vari servlet che necessitano di funzionalità di registrazione. Devo iniettare un SevletContext in queste classi in modo che possano accedere?

Sembra che log4j di Apache sia un pacchetto di registrazione popolare, ma non sono sicuro che valga la pena di configurarlo.

Quale sarebbe il modo consigliato di registrazione per le mie esigenze?

risposta

8

In aggiunta a tutto il BalusC roba è di cui sopra, nel codice Java (servlet/fagioli/altro) Basta importare e inizializzare il logger

package my.app; 

import org.apache.log4j.Logger; 

private static Logger logger = Logger.getLogger("classname"); 
// use any string you want 

Poi in qualsiasi punto la registrazione è possibile accedere a vari livelli come

if (logger.isDebugEnabled()) { 
      logger.debug("Some log at this point"); 
     } 

... 

logger.info("Some info message here"); 

Questi apparirà nei registri a seconda se si imposta DEBUG o INFO nelle log4j.propeties

Date un'occhiata agli esempi su http://www.java2s.com/Code/Java/Language-Basics/Examplelog4jConfigurationFile.htm e tutti gli esempi correlati nello stesso articolo

+1

Grazie per l'aiuto. Non riesco a trovare questo pezzo di collegamento del puzzle. Per inciso, c'è un motivo per cui la funzione di registrazione integrata nel JDK non viene utilizzata più frequentemente? – Wilson

+0

@Wilson - altro su quel dibattito http://stackoverflow.com/questions/31840/java-logging-vs-log4j e http://stackoverflow.com/questions/582428/java-util-logging-logger-and- log4j – JoseK

+0

@JoseK - Esiste un modo semplice per registrare l'attività servlet in un file senza log4j o console? Ho pubblicato una domanda per questo. Per favore aiutami a: https://stackoverflow.com/questions/23858552/simple-way-to-log-servlet-in-tomcat –

10

Non si desidera collegare tutti i dati aziendali e di accesso ai dati con lo ServletContext (presumo ovviamente che il codice aziendale e del DB non sia strettamente accoppiato all'interno di una classe servlet, ma semplicemente vivano nel proprio livello di classi, senza riferimenti javax.servlet). Quindi non consiglierei di usare ServletContext#log(). Inoltre è usato molto raramente nel mondo reale.

Hai ragione che log4j è popolare, anche se è stato sostituito da logback. L'impostazione di log4j non deve essere così problematica. Suggerisco di iniziare con un file delle proprietà che è meno difficile da capire di un file XML. È sempre possibile eseguire l'aggiornamento a un file XML una volta compreso ciò che accade nella configurazione di log4j.

Creare un file denominato log4j.properties, inserirlo da qualche parte nella radice del classpath, ad es. /WEB-INF/classes (o se si sta utilizzando un IDE, la radice della cartella src, alla fine atterrerà nel posto giusto). Puoi anche tenerlo fuori dalla webapp e aggiungere il percorso al classpath di runtime del server specificandone il percorso nella proprietà shared.loader di Tomcat/conf/catalina.properties. Infine riempirlo come segue: esempio

# Set root logger level and appender name. 
log4j.rootLogger = TRACE, console 

# Specify appenders. 
log4j.appender.console = org.apache.log4j.ConsoleAppender 
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender 

# Configure console appender. 
log4j.appender.console.layout = org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n 

# Configure file appender. 
log4j.appender.file.File = /webapp/logs/web.log 
log4j.appender.file.DatePattern = '.'yyyy-MM-dd 
log4j.appender.file.layout = org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n 

Questo kickoff da tronchi di default ad un livello di TRACE. È possibile modificare a DEBUG o INFO in questo modo:

# Set root logger level and appender name. 
log4j.rootLogger = INFO, console 

Questo esempio anche di default usa l'appender console. Verrà registrato sullo standard output come configurato da Tomcat, che per impostazione predefinita viene applicato al file /logs/localhost.yyyy-MM-dd.log.

È possibile tuttavia modificarlo per utilizzare il file appender in questo modo:

# Set root logger level and appender name. 
log4j.rootLogger = INFO, file 

Le impostazioni ConversionPattern possono essere trovati in dettaglio nel PatternLayout javadoc.

Spero che questo ti aiuti a iniziare.

+0

Grazie per le informazioni. La disconnessione principale che ho nel capire come usare Log4j è come usarlo dal codice. Come si usa in un servlet, in bean, in POJOs? Devo creare un'istanza Log4j, quindi trovare e analizzare le proprietà o il file XML? – Wilson

+0

Basta usare 'Logger # getLogger()' e poi i metodi 'debug()', 'info()', etc. Non è necessario trovarlo e analizzarlo ogni volta. Se è nel classpath, log4j lo farà da solo. E 'davvero un problema comune tra gli antipasti perché non capiscono "classpath". – BalusC

+1

Echoing quello che BalusC ha detto, [SLF4J] (http://www.slf4j.org/) + [Logback] (http://logback.qos.ch/) è il modo più moderno per fare il logging. Creato dall'inventore di log4j, e pensato per essere il successore di log4j. Vedi [la mia risposta] (http://stackoverflow.com/a/19947417/642706) a [una domanda simile] (http://stackoverflow.com/questions/19933036/simplest-way-to-log-to-tomcat -catalina-out/19947417 # 19947417) per maggiori informazioni. –

Problemi correlati