log4j:WARN No appenders could be found for logger 的解决方法

本文针对SSH框架中使用Log4j时出现的日志异常问题进行了详细解析,并提供了解决方案,包括配置文件的正确放置、监听器的配置及避免日志重复输出等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SSH在使用Log4j进行日志管理时常会遇到这个异常:

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

网上也有很多解决方案,我在此总结了一下,出现这个问题时应该按以下思路来排查:

1. 确保log4j的配置文件log4j.properties或log4j.xml已经存在(在classpath路径或其他路径下都行,文件内容可参考后面的内容)

2. 没有在web.xml中配置log4j的监听器,如果没有按以下方式配置:

 <!-- log4j配置文件地址 -->
  <context-param>
   <param-name>log4jConfigLocation</param-name>
   <param-value>/WEB-INF/log4j/log4j.properties</param-value>
 </context-param>
 <!-- spring配置文件地址 -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  </context-param>
  
   <!-- Log4j的监听器要放在spring监听器前面 -->
   <listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>
  <!-- spring的监听器 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>


注意:Log4j的监听器要放在spring监听器前面

3. 确保log4j.properties中没有明显的错误存在,如logger或appender配置有误

二、实践验证中的疑似小问题

经过上述几个步骤的排查和修改,日志输出应该没异常了,但实际运行中,还存在一个疑似的问题,就是设置输出到文件中的日志,同时在控制台也会输出,而控制台并没有设置相应的logger,log4j.properties配置如下:

log4j.rootLogger = WARN,C1
log4j.addivity.org.apache=true
 
#category
log4j.category.org.hibernate.tool.hbm2ddl =DEBUG,F1
log4j.category.org.hibernate.SQL =DEBUG,A1 
 
#应用于控制台  
log4j.appender.C1=org.apache.log4j.ConsoleAppender
#log4j.appender.C1.Threshold=WARNING
log4j.appender.C1.Target=System.out
#log4j.appender.C1.Encoding=UTF-8
log4j.appender.C1.layout=org.apache.log4j.PatternLayout
log4j.appender.C1.layout.ConversionPattern=[CONSOLE] %d - %c -%-4r [%t] %-5p %c %x - %m%n   
  
#每天建新日志   
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=E:\\JavaEE workspace\\Spring\\logs\\log4j_daily.log
#log4j.appender.A1.Encoding=UTF-8   
#log4j.appender.A1.Threshold=DEBUG   
log4j.appender.A1.DatePattern=.yyyy-MM-dd   
log4j.appender.A1.layout=org.apache.log4j.PatternLayout   
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
  
#应用于文件
log4j.appender.F1=org.apache.log4j.FileAppender   
log4j.appender.F1.File=E:\\JavaEE workspace\\Spring\\logs\\Spring.log   
log4j.appender.F1.Append=true 
#log4j.appender.F1.Threshold=DEBUG  
#log4j.appender.F1.Encoding=UTF-8  
log4j.appender.F1.layout=org.apache.log4j.PatternLayout 
log4j.appender.F1.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


操作数据库,有SQL输出到文件log4j_daily.log时,控制台也同样输出(控制台并没有这个logger的输出设置):

[CONSOLE] 2013-07-16 17:19:00,953 - org.hibernate.SQL -8235 [http-8080-2] DEBUG org.hibernate.SQL  - select cat0_.id as id0_, cat0_.create_date as create2_0_, cat0_.description as descript3_0_, cat0_.mother_id as mother5_0_, cat0_.name as name0_ from tb_cat cat0_
   Hibernate: select cat0_.id as id0_, cat0_.create_date as create2_0_, cat0_.description as descript3_0_, cat0_.mother_id as mother5_0_, cat0_.name as name0_ from tb_cat cat0_

不知这种情况算不算是正常。

### 回答1: log4j:warn没有找到适用于logger(druid.sql.connection)的附加器。log4j:warn请正确初始化log4j系统。log4j:warn请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig获取更多信息。 ### 回答2: 这是一个常见的错误信息,原因是在使用log4j进行日志记录时,日志框架无法找到合适的输出目的地(appender),因此无法正常输出日志信息。这种错误通常发生在没有正确配置log4j时。 为了解决这个问题,我们需要进行以下步骤: 1. 确认是否正确引入了log4j的jar包 首先,我们需要检查项目中是否正确引入了log4j的jar包。如果没有引入,我们需要在项目的classpath路径下添加log4j的jar包。 2. 确认是否正确配置了log4j.properties或log4j.xml文件 log4j需要根据配置文件进行日志记录,如果没有正确配置,就会出现上述错误。我们需要确认是否存在log4j.properties或log4j.xml文件,并且文件名是否正确、配置项是否正确。 3. 确认是否正确输出日志信息 除了以上两个方面,在代码中也需要正确输出日志信息。在使用log4j时,我们需要使用Logger对象进行日志记录。Logger对象通常提供不同级别的日志记录方法,例如debug、info、warn、error等。我们需要确认代码中是否正确使用了Logger对象,并且使用了合适的日志记录级别。 最后,我们需要根据log4j的文档进行详细的配置和调试,以确保日志记录工作正常。如果仍然无法解决问题,我们可以参考log4j提供的FAQ文档,或者在社区中向其他开发者寻求帮助。 ### 回答3: 首先,这个提示的意思是在你的应用程序的日志中,出现了一条警告信息,提示让你正确地初始化log4j系统,因为当前系统找不到任何可用的appender。 这个提示代码通常在应用程序中使用log4j日志框架时出现,而appender作为log4j日志框架中的一个重要概念,是用来指定日志输出的目标设备(例如控制台、文件、数据库等)的参数。 因此,在出现这个警告时,我们需要关注两个问题:一个是如何初始化log4j日志系统,另一个是如何配置合适的appender。 首先,如果我们使用的是log4j 1.2.x版本的日志框架,我们可以通过如下的初始化代码来初始化log4j系统: ```java import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; public class MyClass { private static final Logger logger = Logger.getLogger(MyClass.class); public static void main(String[] args) { BasicConfigurator.configure(); logger.info("Hello, world."); } } ``` 在这个示例代码中,我们首先使用Logger.getLogger()方法获取一个logger对象,然后使用BasicConfigurator.configure()方法来初始化log4j系统,并在最后使用logger.info()方法输入一条日志信息。 此外,我们还可以使用XML配置文件或者Properties配置文件来进行参数配置,这里就不再赘述。 至于如何配置适合的appender,我们可以参考log4j官方文档中的说明,如果您使用的是log4j 1.2.x版本,可以查看此链接:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html,它对FileAppender类的参数进行了详细的说明,其他的appender类也有相应的文档。 总之,解决log4j:warn no appenders could be found for logger (druid.sql.connection). log4j:warn please initialize the log4j system properly. log4j:warn see http://logging.apache.org/log4j/1.2/faq.html 这个警告信息的关键在于log4j系统的正确初始化和appender的正确配置,只有这两个方面都到位了,才能让我们的应用程序正确输出日志信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值