【问题标题】:Log4j error in java Web Applicationjava Web应用程序中的Log4j错误
【发布时间】:2013-03-08 13:17:53
【问题描述】:

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

最初我尝试使用带有基本配置的 log4j(不使用 log4j.properties 文件)。

我的小服务程序

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.xml 文件吗
  • 我没有在 web.xml 中添加任何东西。我应该在 Web.xml 文件中添加什么
  • 你还需要创建一个log4j.xml
  • 我读到了配置 web.xml 之类的内容,仅当我将 log4j 与 log4j.properties 文件一起使用时才需要

标签: java jakarta-ee servlets


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        编写一个实现 ServletContextListener 的自定义类,如下所示。 该类查找在 web.xml 中定义的名为 log4jFileName 的上下文参数。 这将找到 log4j XML 配置文件。这将在其他类使用它之前配置 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);
            }
        }
        
        1. 在你的 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>
          
        2. 现在适当地配置您的 log4jConfig.xml,以确保您的应用程序日志记录在适当的路径下。使用像 RollingFileAppender 这样的文件追加器来处理应用程序的保留策略。

        这里有一个示例 log4j XML 可以帮助您

        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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-24
          • 1970-01-01
          • 2014-01-27
          相关资源
          最近更新 更多