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)
log4jspringboot项目启动 ,使用的druid数据源,log4j报错 log4j:WARN Please initialize the log4j system properly.(代码片