Failed to create Log4j instance.

I follow the Log4j registration guide in web applications.

This is my log4j.properties 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 

I create a log instance using the init () method:

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

Here I am trying to record a few sample messages:

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

When I run the servlet on Tomcat, I get this error on the 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. 

You do not know how to solve this, and why these errors appear, since I followed the tutorial by type.

+6
source share
1 answer

There are two errors in the file.

  • In log4j.rootLogger=INFO, , demoappender has an empty appender. The value of this string is divided by,, so there is an empty element. The first element is the level.

  • The appender class must implement the org.apache.log4j.Appender interface, and System.out does not implement this interface.

You need to make a few changes to your 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 

Learn more in Apache log4j 1.2 - A brief introduction to log4j .

+12
source

Source: https://habr.com/ru/post/951916/


All Articles