Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/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 log4j:WARN在web.xml中找不到记录器的追加器_Java_Spring_Spring Mvc_Log4j - Fatal编程技术网

Java log4j:WARN在web.xml中找不到记录器的追加器

Java log4j:WARN在web.xml中找不到记录器的追加器,java,spring,spring-mvc,log4j,Java,Spring,Spring Mvc,Log4j,我已经将log4jConfigLocation放在web.xml中,但仍然收到以下警告: log4j:警告找不到记录器的附加器⤦ ⤥ (org.springframework.web.context.ContextLoader)。 log4j:警告请正确初始化log4j系统。 我错过了什么 上下文配置位置 /WEB-INF/applicationContext.xml log4jConfigLocation /WEB-INF/classes/log4j.properties org.spri

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

log4j:警告找不到记录器的附加器⤦
⤥ (org.springframework.web.context.ContextLoader)。
log4j:警告请正确初始化log4j系统。
我错过了什么


上下文配置位置
/WEB-INF/applicationContext.xml
log4jConfigLocation
/WEB-INF/classes/log4j.properties
org.springframework.web.util.Log4jConfigListener
org.springframework.web.context.ContextLoaderListener
苏亚拉2
org.springframework.web.servlet.DispatcherServlet
苏亚拉2
/*

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

如果这是整个log4j.properties文件,则看起来您从未真正创建过记录器。你需要一条像这样的线:

log4j.rootLogger=debug,A1

当类路径中不存在
log4j.properties
时,可能会出现此错误


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

我将log4j.properties放在类路径的正确位置,但仍然收到此警告它直接使用了它。出于某种原因,通过commons日志记录使用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
根据:

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

这意味着您需要为根记录器指定一些appender,任何appender,以便进行日志记录


控制台追加器添加到rootLogger会使此投诉消失。

如果仍有帮助,请验证归档文件的名称,它必须是准确的“log4j.properties”或“log4j.xml”(区分大小写),并按照“Alain O'Dea”的提示进行操作。 我也犯了同样的错误,但在做了这些更改之后,一切都很好。 就像一个符咒:-)。
希望这能有所帮助。

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

在守则中:

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

PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");
修复方法是在加载配置后初始化记录器


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

在我的例子中,解决方法很简单。您不需要在
web.xml
中声明任何内容

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


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

如果要为独立的log4j应用程序进行配置,则可以使用基本配置器。这种解决方案不适合像Spring环境这样的web应用程序

你需要写作-

BasicConfigurator.configure();


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


org.springframework.web.util.Log4jConfigListener
log4jConfigLocation
classpath:/main/resources/log4j.xml

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

  • 我将日志配置的条目[上下文参数]和 侦听器]位于文件顶部[在 它成功了

我想顺序很重要

好的,我看到了很多答案和一些非常正确的答案。然而,没有人能解决我的问题。在我的例子中,问题是UNIX文件系统权限将我在服务器上编辑的log4j.properties文件设置为root所有。只有根才能读取。但是,我部署到tomcat的web应用程序无法读取文件,因为默认情况下,tomcat在Linux系统上以用户tomcat的身份运行。希望这有帮助。因此,解决方案是在log4j.properties文件所在的目录中键入'chown tomcat:tomcat log4j.properties'。

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


log4jConfigLocation
路径/log4j.properties
log4jExposeWebAppRoot
假的
org.springframework.web.util.Log4jConfigListener

我确认位置正确。因为当我将log4j.properties重命名为其他名称时error@Kaffiene当前位置似乎是你没有阅读整个问题(在本例中,作者对问题的一条评论提供了答案所指的信息)@CodeGoat:+1用于读取所有注释。@FranciscoAlvarado我在类路径中有
log4j.properties
文件,但控制台中仍会显示警告。我可以将其粘贴到哪里。@udaykiranpulipati您可以将其粘贴到log4j.properties中。如果您没有log4j.properties,请在src/main/resources/If中使用SBT/Gradle/Maven/etc创建它。否则,请将它放在某个地方,使其最终位于类路径的根(可能在src/)中。您不需要指定log4jConfigLocation。它将从classpath中获取。您是否在classpath文件夹中添加了xml文件?我的log4j位于src/main/resources/log4j.xml下(我使用的是spring集成,配置文件位于classpath下的src/min/resources/META-INF/spring/integration/spring integration context.xml)resources文件夹下?我在桌面应用程序中也有同样的问题(小程序)。文件log4j.properties为alre
ServletContext sc = config.getServletContext();
String log4jLocation = config.getInitParameter("log4j-properties-location");
String webAppPath = sc.getRealPath("/");
String log4jProp = webAppPath + log4jLocation;
PropertyConfigurator.configure(log4jProp);
<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>