slf4j-log4j日志框架配置+错误处理

31 篇文章 0 订阅
23 篇文章 0 订阅

slf4j 和 log4j 绑定(Maven)配置

链接:http://blog.csdn.net/anialy/article/details/8529188


步骤:

1. 在Maven的porn.xml 文件中添加dependency如下

[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>org.slf4j</groupId>  
  3.     <artifactId>slf4j-log4j12</artifactId>  
  4.     <version>1.7.2</version>  
  5. </dependency>  

之后就会添加三个包,


2. 之后在项目下添加log4j.properties


log4j.properties

[html]  view plain  copy
  1. #config root logger  
  2. log4j.rootLogger = INFO,system.out  
  3. log4j.appender.system.out=org.apache.log4j.ConsoleAppender  
  4. log4j.appender.system.out.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.system.out.layout.ConversionPattern=MINAServer Logger-->%5p{%F:%L}-%m%n  
  6.   
  7. #config this Project.file logger  
  8. log4j.logger.thisProject.file=INFO,thisProject.file.out  
  9. log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender  
  10. log4j.appender.thisProject.file.out.File=logContentFile.log  
  11. log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout  


3. 在web.xml中加入代码

<!--log4j-->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:/META-INF/properties/log4j.properties</param-value>
    </context-param>
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>6000</param-value>
    </context-param>

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


4. 使用方法

[java]  view plain  copy
  1. private static final Logger logger = LoggerFactory.getLogger(MINAServer.class);  

接下来就能输出了,
[html]  view plain  copy
  1. logger.info("now {}" , "starting server");  

输出如下:


如果要输出logger文件:

[plain]  view plain  copy
  1. log4j.rootLogger=INFO,R,stdout    
  2.     
  3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender    
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.stdout.layout.ConversionPattern=Logger-->%5p{%F:%L}-%m%n   
  6.     
  7. log4j.appender.R=org.apache.log4j.DailyRollingFileAppender    
  8. log4j.appender.R.File=../logs/log  
  9. log4j.appender.R.layout=org.apache.log4j.PatternLayout  
  10. log4j.appender.R.layout.ConversionPattern=Logger-->%5p{%F:%L}-%m%n   


下面是log4j.properties的配置信息,在此要感谢前辈提供的资源

#输出格式
#%m 输出代码中指定的消息
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
#%r 输出自应用启动到输出该log信息耗费的毫秒数
#%c 输出所属的类目,通常就是所在类的全名
#%t 输出产生该日志事件的线程名
#%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
#%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

格式化例子:
log4j.appender.thisProject.file.out.layout.ConversionPattern=log4j-->%d{yyyy MMM dd HH:mm:ss,SSS}%5p{%F\:%L}-%m%n


注意:

1.信息格式化的小知识
    这些参数中间可能会参杂一些数字比如:%5p它的意思就是在输出此参数之前加入多少个空格,还有就是里面的“\”的作用是转义字符

2.log4j.properties文件放置位置
    (1)在java project项目中,它放置的位置是在项目的根目录下而不是在项目的src目录下。
    (2)在javaweb项目中它放置的位置是在src目录下,因为这个时候tomcat会去默认的加载它的,不需要我们去手动的加载log4j的配置文件,只需要根据配置获取自己需要的logger实例即可,由此我们可以知道如果我们使用的不是tomcat容器的话,是不是需要自己手动加载或者至少要配置一下呢?比如使用Websphere等非apache服务器。

3.对于Java Web项目里面的日志的位置配置
    (1)如果是要指定日志文件的位置为D盘下的log.txt文件。
    log4j.appender.thisProject.file.out.File=d:\\log.txt
    (2)如果指定日志文件的位置为当前的tomcat的工作目录下的某个文件
    log4j.appender.thisProject.file.out.File=${catalina.home}/logs/logs_tomcat.log

4.log4j的加载机制

    log4j.properties加载机制?其实log4j.properties只是log4j的配置文件。程序启动时,log4j组件去读log4j.properties,和读取普通配置文件没多大区别。获取用户配置的一些log4j的属性值,调用想应该的方法为log4j属性设置。

    把log4j.properties当作一个struts.xml或者一个hibernate-cfg.xml就可以了。但不同的是,log4j不像struts和hibernate,它不是一个独立的组件,没法自己完成初始化,一般都是什么组件需要它 就去初始化。比如,hibernate默认的日志组件就是log4j,在hibernate初始化的时候它会去初始化log4j。如果你没配置log4j.properties,hibernate会抛出异常,但还是可以正常初始化。



**************************************************************************************************************************************************************************************

问题处理:
链接:http://www.cnblogs.com/jbelial/archive/2012/06/05/2536814.html

直接写我的解决办法:
在src下面新建file名为log4j.properties内容如下:

# Configure logging for testing: optionally with log file
log4j.rootLogger=WARN, stdout
# log4j.rootLogger=WARN, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

===============================
重新发布,OK,没有提示了。加入了这个配置文件后,再次运行程序上面的警告就会消失。尤其在进行Web 层开发的时候,只有加入了这个文件后才能看到Spring 后台完整的出错信息。在开发Spring 整合应用
时,经常有人遇到出现404 错误但是却看不到任何出错信息的情况,这时你就需要检查一
下这个文件是不是存在。

在Eclipse中开发相关项目时,在控制台经常看到如下信息:
log4j:WARN No appenders could be found for logger
log4j:WARN Please initialize the log4j system properly.

此处输出信息并不是错误信息而仅只是警告信息,因为log4j无法输出日志,log4j是一个日志输入软件包。可以将Struts或Hibernate等压缩包解压,内有log4j.properties文件,将它复制到项目src文件夹或将log4j.properties放到 \WEB-INF\classes文件夹中即可。

===================================
WARN No appenders could be found for logger的解决办法

这几天做一个SSH项目,tomcat启动时出现以下问题:
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

在网上查了一下,多是说把ContextLoaderListener改为SpringContextServlet,但我这样改了没用。后来在一个英文网站上看到一个遇到同样问题的帖子,他是这样改的:

<context-param>
   <param-name>log4jConfigLocation</param-name>
   <param-value>/WEB-INF/config/log4j.properties</param-value>
</context-param>

······

<!-- 定义LOG4J监听器 -->
<listener>
   <listener-class>
org.springframework.web.util.Log4jConfigListener
   </listener-class>
</listener>

这样改了问题就解决了,不用再修改ContextLoaderListener。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值