spring log4j 集成的那些事

1.使用spring集成log4j可以动态指定log日志输出到web项目路径中, 不用写死路径, 还可以动态修改log4j配置文件的日志级别。

2.在集成的过程中,记录一下我遇到的问题

 

log4j.property 配置文件

 

Java代码   收藏代码
  1. log4j.rootLogger=DEBUG,CONSOLE,FILE  
  2.   
  3. log4j.logger.com.lysoft=DEBUG  
  4.   
  5. #apche log  
  6. log4j.logger.org.apache.commons=ERROR  
  7.   
  8. #spring log  
  9. #log4j.logger.org.springframework=DEBUG  
  10. log4j.logger.org.springframework.transaction=DEBUG  
  11.   
  12. #hibernate log  
  13. log4j.logger.org.hibernate=DEBUG  
  14. log4j.logger.org.hibernate.SQL=DEBUG  
  15. log4j.logger.org.hibernate.hql=DEBUG  
  16. log4j.logger.org.hibernate.jdbc=DEBUG  
  17. log4j.logger.net.sf.ehcache=DEBUG   
  18. log4j.logger.org.hibernate.cache=DEBUG  
  19. log4j.logger.org.hibernate.transaction=DEBUG  
  20. log4j.logger.org.hibernate.tool.hbm2ddl=DEBUG  
  21. log4j.logger.org.hibernate.hql.internal.ast=ERROR  
  22.   
  23. #valuelist log  
  24. log4j.logger.net.mlw.vlh=ERROR  
  25.   
  26. #c3p0 log  
  27. log4j.logger.com.mchange.v2.resourcepool.BasicResourcePool=DEBUG  
  28.   
  29. #out log to console  
  30. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
  31. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
  32. log4j.appender.CONSOLE.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c:%L] - %m%n  
  33.   
  34. # Pattern to output the caller's file name and line number.  
  35. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  36. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  37. log4j.appender.stdout.layout.ConversionPattern=%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss}]  %m%n  
  38.   
  39. #out log to file  
  40. log4j.appender.FILE=org.apache.log4j.RollingFileAppender  
  41. log4j.appender.FILE.File=${ssh.root}/WEB-INF/logs/error.log  
  42. log4j.appender.FILE.MaxFileSize=5120KB  
  43. log4j.appender.FILE.MaxBackupIndex=10  
  44. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
  45. log4j.appender.FILE.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%c:%L] - %m%n  

 

我把log4j配置文件放在classpath中的,和spring集成后在,我的项目名称叫SSH,会在SSH/WEB-INF/logs/error.log  路径下面生成一个error.log日志文件, 由于我的tomcat是在d盘,还会在d:/WEB-INF/logs/error.log生成一个文件, 看着非常不爽, 如果部署到客户机器上面,2个地方生成日志,日志大的话,非常占空间,觉得还不爽,打算追根到底看是怎么回事, 于是上网查了下集成的文章, 对比下没有什么区别,就log4j配置文件放在WEB-INF下面,不过这样修改后启动tomcat会有warn

 

Java代码   收藏代码
  1. log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).  
  2. log4j:WARN Please initialize the log4j system properly.  
  3. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.  

 

网上也没有说怎么解决,而且做单元测试的时候也会找不到log4j的配置文件。

后来找到一篇文章说要把Log4jConfigListener 配置放在ContextLoaderListener配置的前面, 这样说来, 看看上面的warn也就知道怎么回事了, 也弄明白了我之前为什么会生成2个log日志文件了,如果是放在classpath下面,ContextLoaderListener可以自动找到log4j配置文件的路径,会根据log4j配置文件中log4j.appender.logfile.File=${ssh.root}/WEB-INF/logs/error.log这个配置在我d盘d:/WEB-INF/logs/error.log生成一个日志文件,由于Log4jConfigListener 还没有初始化,所以${ssh.root}这个取值是空的,就剩下WEB-INF/logs/error.log了,tomcat放在d盘,就形成了d:/WEB-INF/logs/error.log 

最后修正还是把log4j配置文件放在classpath下面(src目录),  修改web.xml配置

 

 

Xml代码   收藏代码
  1. <!-- 加载log4j配置 -->  
  2.     <!-- 注意一定要放在org.springframework.web.context.ContextLoaderListener之前 -->  
  3.     <context-param>  
  4.         <param-name>webAppRootKey</param-name>  
  5.         <param-value>ssh.root</param-value>  
  6.     </context-param>  
  7.     <context-param>   
  8.        <param-name>log4jConfigLocation</param-name>   
  9.        <param-value>classpath:log4j.properties</param-value>   
  10.     </context-param>   
  11.     <!-- log4j每隔60秒扫描 一下配置文件的变化 -->  
  12.     <context-param>   
  13.        <param-name>log4jRefreshInterval</param-name>   
  14.        <param-value>60000</param-value>   
  15.     </context-param>  
  16.     <listener>  
  17.         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  18.     </listener>  
  19.       
  20.     <!-- 初始化spring context -->  
  21.     <context-param>  
  22.         <param-name>contextConfigLocation</param-name>  
  23.         <param-value>classpath:applicationContext-*.xml</param-value>  
  24.     </context-param>  
  25.     <listener>  
  26.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  27.     </listener>  

 

修改后 不再生成2个日志文件了,单元测试日志显示也正常了, 动态修改log4j配置文件日志级别也能用了。

发布了90 篇原创文章 · 获赞 21 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/yx13649017813/article/details/45503259