Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java Web应用程序中的Log4j错误_Java_Jakarta Ee_Servlets - Fatal编程技术网

java Web应用程序中的Log4j错误

java Web应用程序中的Log4j错误,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,我正试图在JavaEE项目中添加Log4j。我已经将log4j.jar文件添加到我的WEB-INF/lib文件夹中,并尝试在我的项目中的一个servlet中实现log4j 最初,我通过使用带有基本配置的log4j(不使用log4j.properties文件)进行了尝试 我的Servlet import org.apache.log4j.*; public class classname extends HttpServlet { private static final long se

我正试图在JavaEE项目中添加Log4j。我已经将log4j.jar文件添加到我的WEB-INF/lib文件夹中,并尝试在我的项目中的一个servlet中实现log4j

最初,我通过使用带有基本配置的log4j(不使用log4j.properties文件)进行了尝试

我的Servlet

import org.apache.log4j.*;

public class classname extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private static Logger log = Logger.getLogger(classname.class);

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

BasicConfigurator.configure();

log.debug("************************Test Message from Log4j*****************************");
我尝试在没有log4j.properties文件的情况下执行此操作,但遇到如下错误:

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我在另一个Java应用程序(不是web)中测试了同样的功能,它在基本配置下运行良好


我需要在我的web项目中添加什么吗?

所有这些都是警告。为了避免这些警告

首先在web.xml中配置log4j。我认为您在wex.xml的某些部分中进行了配置


如果在顶部配置log4j,则可以避免这些警告。

加载Axis时,log4j使用默认的搜索方法查找log4j.properties,但找不到。这将始终导致该警告。我希望类路径上的每个speratelog4j实现都会发生同样的情况。这取决于哪个类加载器正在处理Axis的加载,以确定它将在何处查找和查找属性文件。

您不必在web.xml中声明任何内容

因为您的项目是一个web应用程序,所以部署后配置文件应该位于web-INF/classes上。我建议您创建一个java资源文件夹来实现这一点。另一种方法是将配置文件放在src/main/java中


注意配置名称文件。如果使用xml,则文件名为log4j.xml,否则为log4j.properties。

编写一个实现ServletContextListener的自定义类,如下所示。 该类查找在web.xml中定义的名为log4jFileName的上下文参数。 这将定位log4jxml配置文件。这将在其他类使用log4j之前配置它

Custom listener:

public class StartupListener implements ServletContextListener
{
    @Override
    public void contextDestroyed(ServletContextEvent arg0)
    {
        // Cleanup code goes here
    }

    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
        Logger logger = null;
        ServletContext servletContext = sce.getServletContext();
        String log4jFile = servletContext.getInitParameter("log4jFileName");
        DOMConfigurator.configure(log4jFile);
        logger = LogManager.getLogger(StartupListener.class.getName());
        logger.debug("Loaded: " + log4jFile);
    }
}
  • 在web.xml中定义侦听器和上下文参数,如下所示

       <context-param>
        <param-name>log4jFileName</param-name>
        <param-value>app/log4j/config/log4jConfig.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            com.yourpackage.YourListener
        </listener-class>
    </listener>
    
    
    log4jFileName
    app/log4j/config/log4jConfig.xml
    com.yourpackage.YourListener
    
  • 现在适当地配置log4jConfig.xml,以确保应用程序日志记录在适当的路径下。使用类似RollingFileAppender的文件追加器来处理应用程序的保留策略

  • 下面是一个示例log4jxml来帮助您

    Sample log4j XML: (Customize as necessary)
    
    <?xml version="1.0" encoding="UTF-8"?>
    <log4j:configuration xmlns:log4j = "http://jakarta.apache.org/log4j/" debug = "false">
        <appender name = "FILE" class = "org.apache.log4j.RollingFileAppender">
            <param name = "File" value = "/usr/local/path/to/application.log"/>
            <param name = "MaxFileSize" value = "5MB"/>
            <param name = "MaxBackupIndex" value = "50"/>
            <layout class = "org.apache.log4j.PatternLayout">
                <param name = "ConversionPattern" value = "[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n"/>
            </layout>
        </appender>
        <category name = "com.your.application.package">
            <priority value = "debug"/>
        </category>
        <category name = "org.apache.catalina">
            <priority value = "error"/>
        </category>
        <category name = "org.hibernate">
            <priority value = "error"/>
        </category>
        <root>
            <priority value = "info"/>
            <appender-ref ref = "FILE"/>
        </root>
    </log4j:configuration>
    
    示例log4jxml:(根据需要定制)
    
    你可以显示web.xml文件吗?我没有在web.xml中添加任何内容。我应该在web.xml文件中添加什么?你还需要创建一个log4j.xml文件。我读到类似于配置web.xml的内容,只有在使用log4j和log4j.properties文件时才需要