2013-08-16 44 views
6

WebアプリケーションのLog4jログインに関するチュートリアルに従っています。Log4j appenderをインスタンス化できませんでした

これは私のlog4j.propertiesファイルです:

:私はいくつかのサンプルメッセージを記録しようとする場所です

private Logger logger = null; 

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

:私はinit()メソッドを使用して、ロガーをインスタンス化しています

#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 

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"); 

Tomcatでサーブレットを実行すると、コンソールで次のエラーが表示されます。

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. 

私はこのチュートリアルをTシャツに従って以来、これを解決する方法と、なぜこれらのエラーが発生するのかよく分かりません。

答えて

12

ファイルに2つのエラーがあります。

  1. log4j.rootLogger=INFO, , demoappender空のアペンダがあります。この行の値はになります。,になるため、空の要素があります。最初の要素はレベルです。

  2. アペンダーのクラスは、インターフェイスorg.apache.log4j.Appenderを実装する必要があり、System.outはそのインターフェイスを実装しません。

ファイルをいくつか変更する必要があります。

# 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 

Apache log4j 1.2 - Short introduction to log4jをさらに参照してください。

+0

ありがとう、これは私のために働いた。私の間違いが何だったのか説明できますか? – Chaos

+1

もちろん。私は私の答えを編集しました。がんばろう! –

+0

ありがとうございました! – Chaos

関連する問題