【问题标题】:log4j:WARN No appenders could be found for logger in web.xmllog4j:WARN 在 web.xml 中找不到记录器的附加程序
【发布时间】:2010-11-18 23:08:37
【问题描述】:

我已经将 log4jConfigLocation 放在 web.xml 中,但仍然收到以下警告:

log4j:WARN No appenders could be found for logger ⤦
    ⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

我错过了什么?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext.xml
        </param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>suara2</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>suara2</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

【问题讨论】:

标签: java spring spring-mvc log4j


【解决方案1】:

将这些行放在 web.xml 的开头:

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:/main/resources/log4j.xml</param-value>
</context-param> 

【讨论】:

  • 您不需要指定 log4jConfigLocation。它将从类路径中获取。
  • 你在classes文件夹中添加xml文件了吗?
  • 我的 log4j 在 src/main/resources/log4j.xml 下(我正在使用 spring 集成,我的配置文件在 src/min/resources/META-INF/spring/integration/spring-integration- context.xml)
  • 类路径下的资源文件夹?
【解决方案2】:

在 web.xml 中添加 log4jExposeWebAppRoot -> false。它适用于我:)

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>path/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jExposeWebAppRoot</param-name>
    <param-value>false</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

【讨论】:

    【解决方案3】:

    就我而言,解决方案很简单。您无需在 web.xml 中声明任何内容。

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

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

    【讨论】:

      【解决方案4】:

      当您的log4j.properties 不在类路径中时,您可能会收到此错误。

      这意味着您必须将 log4j.properties 移动到 src 文件夹中并将输出设置为 bin 文件夹,以便在运行时 log4j.properties 将从 bin 文件夹中读取并且您的错误将很容易解决。

      【讨论】:

      • 我在桌面应用程序 (Applet) 中遇到了同样的问题。文件 log4j.properties 已经在 src 文件夹中。如何“将输出设置到 bin 文件夹”?
      【解决方案5】:

      我在类路径中的正确位置有 log4j.properties,但直接使用它的任何东西仍然收到此警告。出于某种原因,通过 commons-logging 使用 log4j 的代码似乎很好。

      如果你有:

      log4j.rootLogger=WARN
      

      改成:

      log4j.rootLogger=WARN, console
      log4j.appender.console=org.apache.log4j.ConsoleAppender
      log4j.appender.console.layout=org.apache.log4j.PatternLayout
      log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
      

      http://logging.apache.org/log4j/1.2/manual.html

      根记录器是匿名的,但可以使用 Logger.getRootLogger() 方法访问。没有附加到 root 的默认附加程序。

      这意味着您需要为根记录器指定一些附加程序,任何附加程序,才能进行记录。

      console 附加程序添加到 rootLogger 可以消除此投诉。

      【讨论】:

      • 我在哪里可以粘贴这个。
      • @udaykiranpulipati 您可以将其粘贴到 log4j.properties 中。如果您没有 log4j.properties,请在 src/main/resources/ 中创建它(如果使用 SBT/Gradle/Maven/etc)。否则把它放在某个地方,它最终会在类路径的根目录下(可能在 src/ 中)。
      【解决方案6】:

      好的,我看到很多答案,有些非常正确。但是,没有人解决我的问题。我的问题是 UNIX 文件系统权限具有我在服务器上编辑的 log4j.properties 文件,该文件由 root 拥有。并且只能由 root 读取。但是,我正在部署的 Web 应用程序是 tomcat 无法读取文件,因为 tomcat 在 Linux 系统上默认以用户 tomcat 运行。希望这可以帮助。所以解决方案是在 log4j.properties 文件所在的目录中键入“chown tomcat:tomcat log4j.properties”。

      【讨论】:

        【解决方案7】:

        我有同样的问题。相同的配置设置和相同的警告消息。对我有用的是: 更改条目的顺序。

        • 我将日志配置条目 [上下文参数和 监听器 ] 在文件顶部 [ 在 applicationContext.xml ] 并且它起作用了。

        我猜顺序很重要。

        【讨论】:

          【解决方案8】:

          如果您想为独立的 log4j 应用程序进行配置,您可以使用 BasicConfigurator。该解决方案不适合 Spring 环境等 Web 应用程序。

          你需要写-

          BasicConfigurator.configure();
          

          ServletContext sc = config.getServletContext();
          String log4jLocation = config.getInitParameter("log4j-properties-location");
          String webAppPath = sc.getRealPath("/");
          String log4jProp = webAppPath + log4jLocation;
          PropertyConfigurator.configure(log4jProp);
          

          【讨论】:

            【解决方案9】:

            或者,您可以像我一样在加载日志配置文件之前定义记录器。正如他们所说:“本末倒置。”

            在代码中:

            public static Logger logger = Logger.getLogger("RbReport");
            

            ... 稍后

            PropertyConfigurator.configure(l4j);
            logger = Logger.getLogger("RbReport");
            

            修复是在加载配置后初始化记录器。

            对于极客来说,这是“把笛卡尔 b4 d 马放在一边”。

            【讨论】:

              【解决方案10】:

              如果仍然有帮助,请验证存档名称,它必须是准确的“log4j.properties”或“log4j.xml”(区分大小写),并按照“Alain O'Dea”的提示进行操作。 我遇到了同样的错误,但是在进行这些更改后一切正常。 就像一个魅力:-)。 希望这会有所帮助。

              【讨论】:

                【解决方案11】:

                如果这是整个 log4j.properties 文件,那么您似乎从未真正创建过记录器。你需要这样一行:

                log4j.rootLogger=debug,A1
                

                【讨论】:

                • @Kaffiene:似乎是您没有阅读整个问题(在这种情况下,作者对该问题的一位 cmets 提供了答案所指的信息)。 @CodeGoat:+1 用于阅读所有 cmets。
                • @FranciscoAlvarado 我在类路径中有log4j.properties 文件,控制台中仍然显示警告。
                【解决方案12】:

                如果 log4j 在任何地方都找不到文件“log4j.properties”或“log4j.xml”,您将看到此警告。

                【讨论】:

                • 我确认位置正确。因为当我将 log4j.properties 重命名为其他名称时,它会给出错误
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-10-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-09-13
                相关资源
                最近更新 更多