大家好,欢迎来到IT知识分享网。
Log4j是个好东西,软件运行过程中输出日志都靠他啦。不过因为日常的开发工作,都是直接使用也没有怎么仔细研究过,所以现在好好研究研究。其实Log4j还是很简单的,常用的东西不是很多,配置文件理清楚就明白了。
Log4j由三个重要的组件构成:日志信息的级别(level),日志信息的输出目的地(Appender),日志信息的输出格式(Layout)。
日志信息的级别从高到低为:
- off 最高等级,用于关闭所有日志记录。
- fatal 指出每个严重的错误事件将会导致应用程序的退出。
- error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
- warm 表明会出现潜在的错误情形。
- info 一般和在粗粒度级别上,强调应用程序的运行全程。
- debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
- all 最低等级,用于打开所有日志记录。
分别用来指定这条日志信息的重要程度;
日志信息的输出目的地指定了日志将打印到控制台还是文件中;
日志信息的输出格式则控制了日志信息的显示内容,是以什么样的格式输出的。
下面就来看看log4j是如何配置以及简单使用的。
一、log4j的配置格式
1、首先配置
配置根Logger,格式为:
配置根Logger,格式为:
log4j.rootLogger = [level] , appenderName1, appenderName2,blablabla...
这里的level就是上文说的日志信息的级别,常用的是
ERROR、WARN、INFO、DEBUG,是不区分大小写的。后面紧跟的appenderName则是日志输出目的地的Appender,Appender的名字是可以随便起的,只要在下面的配置中做对应的配置就好。
ERROR、WARN、INFO、DEBUG,是不区分大小写的。后面紧跟的appenderName则是日志输出目的地的Appender,Appender的名字是可以随便起的,只要在下面的配置中做对应的配置就好。
2、接下来要配置各个Appender,格式为:
log4j.appender.appenderName=【Appender日志信息输出目的地】
其中log4j提供的Appender有以下几种:
- org.apache.log4j.ConsoleAppender(控制台),
- org.apache.log4j.FileAppender(文件),
- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置相应的Appender就会输出到对应的地方。
log4j.appender.appenderName.File=日志文件保存目录(如果是输出到控制台,就不用配置这一项了)
log4j.appender.appenderName.Append=true true表示日志信息增加到指定文件中,false则将日志信息覆盖指定的文件内容,默认值是true
log4j.appender.appenderName.Threshold=DEBUG 只输出DEBUG级别以上的日志 设置日志输出级别
log4j.appender.appenderName.layout=【Layout日志布局格式】
其中log4j提供的布局格式有以下几种:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.appenderName.layout.ConversionPattern=日志输出格式
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
- %m 输出代码中指定的消息
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
- %r 输出自应用启动到输出该log信息耗费的毫秒数
- %c 输出所属的类目,通常就是所在类的全名
- %t 输出产生该日志事件的线程名
- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
所以可以根据自己的需求配置自由搭配的输出格式,如:%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] – [ %p ] %m%n
一个很简单的配置:
log4j.properties
### 设置 ###
log4j.rootLogger=debug,stdout,DDD,EEE
### 输出信息到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=/Users/tinybye/Documents/log4j/debug.log ###
log4j.appender.DDD=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DDD.File=/Users/tinybye/Documents/log4j/debug.log
log4j.appender.DDD.Append=true
log4j.appender.DDD.Threshold=DEBUG
log4j.appender.DDD.layout=org.apache.log4j.PatternLayout
log4j.appender.DDD.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=/Users/tinybye/Documents/log4j/error.log ###
log4j.appender.EEE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.EEE.File=/Users/tinybye/Documents/log4j/error.log
log4j.appender.EEE.Append=true
log4j.appender.EEE.Threshold=ERROR
log4j.appender.EEE.layout=org.apache.log4j.PatternLayout
log4j.appender.EEE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
二、使用log4j输出日志
首先要导入log4j的依赖包,新建一个测试类Log4jText.java。然后将配置文件log4j.properties放在和测试类相同的路径的resource文件夹下。如图所示:
Log4jText类代码如下:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
/**
* Created by tinybye on 2017/3/14.
*/
public class Log4jText {
private static Logger logger = Logger.getLogger(Log4jText.class);
public static void main(String[] args) {
//获取log4j配置文件
PropertyConfigurator.configure(ClassLoader.getSystemResource("resource/log4j.properties"));
logger.error("ERROR!!!!!");//输出error级别的日志
logger.debug("DEBUG~");//输出debug级别的日志
}
}
==========分割线==========
其实这里的代码有些问题,logger应该是定义成为final的。原因有两个:
1.出于资源利用的考虑,Logger的构造方法参数是Class,决定了Logger是根据类的结构来进行区分日志,所以一个类只要一个Logger就可以了,故static
2.final表示一种编程习惯,表示该类的Logger只是记录该类的信息,否则日志会无法提供可以令人信服的记录。
参考地址:https://blog.csdn.net/phil_jing/article/details/52789655
——2018.4.8
==========分割线==========
运行后控制台输出日志如图所示:
输出日志:
在配置的路径下生成两个log日志文件,不同级别的日志信息输出到了对应的log日志文件中。
呐,就是一些很简单的东西,日常的使用中这些肯定是足够了的。如果想更多的了解log4j的内容,可以看看下面的参考文章。
参考文章:
http://www.codeceo.com/article/log4j-usage.html
http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html
http://blog.csdn.net/azheng270/article/details/2173430/
=========这里是分割线2017.08.26=========
三、整合Spring mvc
这几天在丰富自己的一个小项目,想着要把log4j集成到Spring mvc中,所以在这里简单的记述一下。
配置很简单,只要在web.xml文件中进行配置就好,配置如下:
<!--log4j配置文件地址--> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/classes/resource/config/log4j.properties</param-value> </context-param> <!--log4j监听--> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14217.html