2013-08-16 13 views
6

Sto seguendo un tutorial su Log4j per l'accesso alle applicazioni web.L'appender di Log4j non può essere istanziato

Questo è il mio log4j.properties di file:

#log to console 
log4j.rootLogger=INFO, , demoappender 
log4j.appender.demoappender=org.apache.log4j.ConsoleAppender 
log4j.appender.demoappender=System.out 
log4j.appender.demoappender.layout=org.apache.log4j.PatternLayout 
log4j.appender.demoappender.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n 

sto istanziare il registratore utilizzando un metodo init():

private Logger logger = null; 

public void init(ServletConfig config) throws ServletException { 
    logger = Logger.getRootLogger(); 
} 

Questo è dove cerco di registrare alcuni messaggi di esempio:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    logger.info("logging INFO message"); 
    logger.error("logging ERROR message"); 
    logger.warn("loggging WARNING message"); 
    logger.fatal("logging FATAL message"); 


    response.setContentType("text/html"); 

Quando eseguo il servlet su Tomcat, viene visualizzato questo errore sulla console:

log4j:ERROR Could not find value for key log4j.appender. 
log4j:ERROR Could not instantiate appender named "". 
log4j:ERROR Could not instantiate class [System.out]. 
java.lang.ClassNotFoundException: System.out 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:190) 
at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198) 
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:327) 
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:124) 
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:785) 
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) 
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648) 
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514) 
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580) 
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526) 
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127) 
at org.apache.log4j.Logger.getRootLogger(Logger.java:135) 
at Log4jDemoServlet.init(Log4jDemoServlet.java:22) 
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1189) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1103) 
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:813) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) 
log4j:ERROR Could not instantiate appender named "demoappender". 
log4j:WARN No appenders could be found for logger (root). 
log4j:WARN Please initialize the log4j system properly. 

Non so come risolvere questo, e perché questi errori sono in arrivo, dal momento che ho seguito il tutorial per un tee.

risposta

12

Ci sono due errori nel file.

  1. C'è un appender vuoto in log4j.rootLogger=INFO, , demoappender. Il valore di questa riga è diviso per , quindi c'è un elemento vuoto. Il primo elemento è il livello.

  2. La classe dell'appender deve implementare l'interfaccia org.apache.log4j.Appender e System.out non implementa tale interfaccia.

È necessario apportare diverse modifiche al file.

# Set root logger level to INFO and its only appender to demoappender 
log4j.rootLogger=INFO, demoappender 

# demoappender is set to be a ConsoleAppender. 
log4j.appender.demoappender=org.apache.log4j.ConsoleAppender 
# log4j.appender.demoappender=System.out     <-- Remove this line 

# demoappender uses PatternLayout. 
log4j.appender.demoappender.layout=org.apache.log4j.PatternLayout 
log4j.appender.demoappender.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n 

Altre informazioni in Apache log4j 1.2 - Short introduction to log4j.

+0

Grazie, questo ha funzionato per me. Potresti spiegare quale è stato il mio errore? – Chaos

+1

Ovviamente. Ho modificato la mia risposta. In bocca al lupo! –

+0

Grazie mille! – Chaos

Problemi correlati