Log4j是帮助开发人员进行日志输出管理的API类库。它最重要的特点就可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。Log4j除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。很多程序员经常会使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些语句注释掉。若哪天又需调试变量值,则只能再 一行行去掉这些注释恢复System.out.println语句。使用log4j可以很好的处理类似情况:使用"DEBUG"等级输出会类似System.out.println,开发后期不需要输出调试时可以把等级根据需要调高,如调到"ERROR"等级,只有出错错误时才输出。
在apache网站:jakarta.apache.org/log4j可以免费下载到Log4j最新版本的软件包。
使用步骤分为3步:
1. 加入log4j的jar包。
2. 在项目根目录下添加配置文件log4j.properties
#设置logger级别DEBUG、INFO、WRNING、ERROR和输出格式A、B、C或D
log4j.rootLogger=DEBUG, A
#输出到控制台
log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
3. 创建日志记录器来使用
import org.apache.log4j.Logger;
public class Test {
//获取日志记录器Logger,名字为本类类名
private static Logger log = Logger.getLogger(Test.class);
public static void main(String[] args) {
log.debug("HellWord");
}
}
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度,比如使用DEBUG,则会包括前面3个,也就是全部都包括,使用INFO,则不包括DEBUG;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
1. 配置log输出目的地:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
2. log信息的格式:
org.apache.log4j.HTMLLayout(HTML表格形式)
org.apache.log4j.SimpleLayout(简单格式的日志,只包括日志信息的级别和指定的信息字符串 ,如:DEBUG - Hello)
org.apache.log4j.TTCCLayout(日志的格式包括日志产生的时间、线程、类别等等信息)
org.apache.log4j.PatternLayout(灵活地自定义日志格式)
当使用org.apache.log4j.PatternLayout来自定义信息格式时,可以使用log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss} %p-%m%n 来格式化信息
%c 输出所属类的全名,可写为 %c{Num} ,Num类名输出的范围 如:"com.sun.aaa.classB",%C{2}将使日志输出输出范围为:aaa.classB
%d 输出日志时间其格式为 可指定格式 如 %d{HH:mm:ss}等
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出日志的优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该条日志信息所耗费的时间(毫秒数)
%t 输出产生该日志事件的线程名
log4j配置解释1:
###把日志信息输出到控制台###
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=%d{yyyy-MM-dd HH:mm:ss}%m%n
###把日志信息输出到文件:test.log###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=test.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%m%n
###设置优先级别、以及输出源###
log4j.rootLogger=debug,stdout,file
配置解释:
log4j充许日志请求被输出到多个输出源,一个输出源被称做一个appender。上面有两个appender,第一个命名为stdout,使用了ConsoleAppender,
通过配置Target属性,把日志信息写到控制台,其效果等同于直接把信息打印到System.out上了。第二个appender命名为file,使用了
FileAppender,通过配置File属性,把日志信息写到指定的文件(test.log)中。
layout指定了日志信息输出的样式。上面两种输出都使用了PatternLayout,可以灵活地指定布局模式。但是要配置layout.ConversionPattern属性,
其中:%d{yyyy-MM-dd HH:mm:ss}用来设置输出日志的时间,输出格式类似于2009-05-13 09:00:00 ;%m用来输出代码中指定的消息;%n用来输出一个回车符;
%l用来输出日志事件的发生位置,包括类名、发生的线程,以及在代码中的行数。例如:如果输出为Java.ch04.TestLog4j.min(TestLog4j.java:12),
说明日志事件发生在TestLog4j类中的main线程中,在代码中的行数为第12行。
日志信息具有输出优先级,优先级从高到低分别是FATA、error、warn、info、debug。上面最后一句设置优先级别为debug,并且设置日志被分别输出到控制台以及
test.log文件中。
-------------------------------------------------------------------------------------------------------------------------------------------------
log4j配置解释2:
#log4j.rootLogger=DEBUG,A1,R
### 设置优先级别(fata、error、warn、debug、info)、以及输出源(控制台、文件) ###
log4j.rootLogger=INFO,A1,R
### 把日志信息输出到控制台 ###
### A1,R输出源名称 ###
### ConsoleAppender:把日志信息写到控制台 ###
log4j.appender.A1=org.apache.log4j.ConsoleAppender
### 输出样式 布局模式###
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
### %c:包名.文件名。%p:输出级别,%m:输出代码中指定的消息,%n:输出一个回车换行符,%l:输出日志信息发生的位置,包括类名、发生的线程、行数 ,%t输出一个制表符###
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### RollingFileAppender:把日志信息循环滚动写到文件,FileAppender:把日志信息写到文件###
log4j.appender.R=org.apache.log4j.RollingFileAppender
### 设置日志信息文件名为bbscs7log.txt ###
log4j.appender.R.File=bbscs7log.txt
### 设置日志信息文件大小为500KB ###
log4j.appender.R.MaxFileSize=500KB
### 设置日志信息文件总数最多为10个 ###
log4j.appender.R.MaxBackupIndex=10
### 输出样式 布局模式###
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d%d%d%d%d%d%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
#log4j.logger.org.springframework.transaction.interceptor=DEBUG