log4j

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j相关的知识,希望对你有一定的参考价值。

  相信从事java工作者,都会知道log4j用来打印日志的。

  我的java经验不长,没研究过log4j的工作原理,这两天有时间看了下怎么用它。

  首先log4j的配置文件 log4j.properties或者log4j.xml,再或者json格式的(json格式这个在网上看到的,具体log4j能不能解析,我暂时没看)。对于加载配置文件,第一种是log4j在Spring框架加载,第二种调用PropertyConfigurator.configure加载

  先说前者加载方式,Spring提供了Log4jConfigListener,它可以通过web.xml配置从指定位置加载log4j配置文件

 1 <!-- 设置由Sprng载入的Log4j配置文件位置 -->
 2 <context-param> 
 3     <param-name>log4jConfigLocation</param-name> 
 4     <param-value>WEB-INF/classes/log4j.properties</param-value> 
 5 </context-param> 
 6   <!-- Spring刷新Log4j配置文件变动的间隔,单位为毫秒 -->
 7 <context-param> 
 8     <param-name>log4jRefreshInterval</param-name> 
 9     <param-value>10000</param-value> 
10 </context-param> 
11  
12 <listener> 
13     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
14 </listener>

需要注意  Log4jConfigListener必须在Listener之前。

  后者就是手动调用PropertyConfigurator.configure("resources/log4j.properties");这个方法。

 

画龙点睛:log4j的配置文件到底怎么配置呢,贴代码

log4j.properties,这里以properties文件为例

 1  ### 设置###
 2 log4j.rootLogger = debug,stdout,D,E
 3 
 4 ### 输出信息到控制抬 ###
 5 log4j.appender.stdout = org.apache.log4j.ConsoleAppender
 6 log4j.appender.stdout.Target = System.out
 7 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
 8 log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
 9 
10 ### 输出DEBUG 级别以上的日志到=F://logs/log.log ###
11 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
12 log4j.appender.D.File = F://logs/log.log
13 log4j.appender.D.Append = true
14 log4j.appender.D.Threshold = DEBUG 
15 log4j.appender.D.layout = org.apache.log4j.PatternLayout
16 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
17 
18 ### 输出ERROR 级别以上的日志到=F://logs/error.log ###
19 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
20 log4j.appender.E.File =F://logs/error.log 
21 log4j.appender.E.Append = true
22 log4j.appender.E.Threshold = ERROR 
23 log4j.appender.E.layout = org.apache.log4j.PatternLayout
24 log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]

然后就是调用啦

 1 import org.apache.log4j.LogManager;
 2 import org.apache.log4j.Logger;
 3 import org.apache.log4j.PropertyConfigurator;
 4 
 5 public class Test {
 6 
 7     private static Logger logger = LogManager.getLogger("hello");
 8 
 9     public static void main(String[] args) {
10 
11         PropertyConfigurator.configure("resources/log4j.properties");
12 
13         logger.debug("This is debug message!");
14 
15         logger.info("This is info message!");
16 
17         logger.error("This is error message!");
18     }
19 }

最后就看看输出

1 [DEBUG] 2016-04-05 13:35:50,858 method:Test.main(Test.java:13)
2 This is debug message!
3 [INFO ] 2016-04-05 13:35:50,860 method:Test.main(Test.java:15)
4 This is info message!
5 [ERROR] 2016-04-05 13:35:50,861 method:Test.main(Test.java:17)
6 This is error message!

当然还有打印出的日志文件

F:\logs

log.log

2016-04-05 13:35:50 [ main:0 ] - [ DEBUG ] This is debug message!
2016-04-05 13:35:50 [ main:2 ] - [ INFO ] This is info message!
2016-04-05 13:35:50 [ main:3 ] - [ ERROR ] This is error message!

 

error.log

2016-04-05 13:35:50  [ main:3 ] - [ ERROR ]

 

以上是关于log4j的主要内容,如果未能解决你的问题,请参考以下文章

log4j怎样控制只输出自己写的代码的日志,不输出框架中的日志

Log4j反序列化远程代码执行漏洞(CVE-2019-17571)

由log4j远程执行漏洞说起

混合 log4j 1.x 和 log4j 2

Java 标准日志工具 Log4j 的使用(附源代码)

log4jspringboot项目启动 ,使用的druid数据源,log4j报错 log4j:WARN Please initialize the log4j system properly.(代码片