log4j:warn找不到
If you are reading this, you must be using log4j framework and got below error message.
如果您正在阅读本文,则必须使用log4j框架并收到以下错误消息。
log4j:WARN No appenders could be found for logger
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See https://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Log4j warning for no appenders will come to console for standalone applications and in server logs for web applications running into some servlet container such as Tomcat or JBoss.
对于独立应用程序,控制台将出现Log4j警告,没有附加程序将出现在控制台中;对于运行到某些servlet容器(例如Tomcat或JBoss)中的Web应用程序,将在服务器日志中显示Log4j警告 。
There could be multiple reasons for log4j warning no appenders found, let’s look at common reasons and how to fix them.
log4j可能有多种原因警告未找到附加程序,让我们看看常见原因以及如何解决它们。
This is the most common reason, log4j framework look for log4j.xml or log4j.properties file in the classpath of your application. If you have a maven based application, you can create a source folder and put the configuration files there, as shown in below image.
这是最常见的原因,log4j框架在应用程序的类路径中查找log4j.xml或log4j.properties文件。 如果您具有基于Maven的应用程序,则可以创建一个源文件夹并将配置文件放在此处,如下图所示。
If you are using log4j in web applications then check for this configuration file at WEB-INF/classes directory. If it’s not there then check that your source folders are properly configured.
如果在Web应用程序中使用log4j,请在WEB-INF / classes目录中检查此配置文件。 如果不存在,请检查您的源文件夹是否已正确配置。
Log4j looks for standard file names, so if your log4j configuration file name is myapp-log4j.xml or myapp-log4j.properties then log4j won’t be able to load it automatically and you will get standard warning message.
Log4j查找标准文件名,因此,如果您的log4j配置文件名是myapp-log4j.xml或myapp-log4j.properties,则log4j将无法自动加载它,并且您会收到标准警告消息。
For standalone java application, you can fix it easily through configuring it inside main method before using it. For example;
对于独立的Java应用程序,可以在使用它之前通过在main方法内部对其进行配置来轻松修复它。 例如;
/**
* method to init log4j configurations, should be called first before using logging
*/
private static void init() {
DOMConfigurator.configure("myapp-log4j.xml");
// OR for property file, should use any one of these
//PropertyConfigurator.configure("myapp-log4j.properties");
}
But you can’t use this simple approach with web application, because the configuration file is inside WEB-INF/classes directory. You can do this configuration through ServletContextListener as shown in below code.
但是您不能在Web应用程序中使用这种简单方法,因为配置文件位于WEB-INF / classes目录中。 您可以通过ServletContextListener进行此配置,如下面的代码所示。
public final class Log4jInitListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent paramServletContextEvent) {
}
public void contextInitialized(ServletContextEvent servletContext) {
String webAppPath = servletContext.getServletContext().getRealPath("/");
String log4jFilePath = webAppPath + "WEB-INF/classes/myapp-log4j.xml";
DOMConfigurator.configure(log4jFilePath);
System.out.println("initialized log4j configuration from file:"+log4jFilePath);
}
}
Another approach is to set the log4j.configuration system property through java options like below.
另一种方法是通过如下所示的java选项设置log4j.configuration系统属性。
-Dlog4j.configuration=file:///path/to/your/myapp-log4j.xml
Log4j framework is smart enough to use DOMConfigurator or PropertyConfigurator based on the file extension.
Log4j框架足够聪明,可以根据文件扩展名使用DOMConfigurator或PropertyConfigurator。
That’s all, log4j is simple to use once you get hold of these initial issues.
就是这样,一旦掌握了这些初始问题,log4j就很容易使用。
References:
参考文献 :
log4j:warn找不到