前言
Log4j是Apache的一个开放源代码项目。使用Log4j,我们可以控制日志信息输出目的地,日志的输出格式,日志的级别。这些都可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
开始使用
1、导入log4j的jar包:log4j-1.2.17.jar
2、log4j配置,一般可以采用两种方式,.properties和.xml,此处我们使用properties。在CLASSPATH下(如src/main/resources)创建log4j.properties配置文件,最基本的内容如下:
log4j.rootLogger=INFO,consoleAppender
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
3、在要输出日志的类中定义:
private final Log log = LogFactory.getLog(getClass());
要输出的内容:
log.info("我是日志!");
注意:
如果只是引入了jar包但是没有创建配置文件或者配置文件为空的话,使用输出日志的时候会报如下错:
log4j:WARN No appenders could be found for logger (com.hello.test.HelloTest).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
如果有配置文件但是其中缺少layout的配置的话,会报如下错:
log4j:ERROR Could not find value for key
log4j.appender.consoleAppender.layout
log4j:ERROR No layout set for the appender named [consoleAppender].
log4j.properties配置文件详解
配置根Logger
log4j.rootLogger=INFO,consoleAppender
此句为将等级为INFO的日志输出到consoleAppender这个目的地
等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,
优先级FATAL>ERROR>WARN>INFO>DEBUG,
如果配置OFF则不打出任何信息,如果配置为INFO则只显示INFO, WARN, ERROR, FATAL的log信息,而DEBUG信息不会被显示
此处也可写为:
log4j.rootCategory=INFO,consoleAppender
但是要注意,rootLogger是新的使用名称,对应Logger类
rootCategory是旧的使用名称,对应原来的Category类
Logger类是Category类的子类,所以,rootCategory是旧的用法,不推荐使用
输出目的地
Log4j允许日志请求被输出到多个输出源。一个输出源被称做一个Appender。
输出到控制台:
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
输出到文件:
log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.File=D://file.log
输出到文件,每天产生一个日志文件:
log4j.appender.dailyRollingFileAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFileAppender.File=D://log/file.log
输出到轮转文件:
log4j.appender.rollingFileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFileAppender.File=D://log/rollingfile.log
log4j.appender.rollingFileAppender.Append=true
log4j.appender.rollingFileAppender.MaxFileSize=1KB
log4j.appender.rollingFileAppender.MaxBackupIndex=1
该配置指定了输出源dailyRollingFileAppender,是一个轮转日志文件。最大的文件是1KB,当一个日志文件达到最大尺寸时,Log4J会自动把rollingfile.log重命名为rollingfile.log.1,然后重建一个新的rollingfile.log文件,依次轮转。
输出到邮件:
log4j.appender.smtpAppender=org.apache.log4j.net.SMTPAppender
log4j.appender.smtpAppender.Threshold=ERROR
log4j.appender.smtpAppender.BufferSize=10
log4j.appender.smtpAppender.From=xxx@163.com
log4j.appender.smtpAppender.SMTPUsername=xxx@163.com
log4j.appender.smtpAppender.SMTPPassword=xxxxxx
log4j.appender.smtpAppender.SMTPHost=smtp.163.com
log4j.appender.smtpAppender.Subject=Log4J Message
log4j.appender.smtpAppender.To=xxx@qq.com
发送邮件需要引入jar包:mail-1.4.7.jar,activation-1.1.jar
maven依赖如下:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
输出到数据库:
log4j.appender.jdbcAppender=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.jdbcAppender.URL=jdbc:mysql://localhost:3306/test
log4j.appender.jdbcAppender.driver=com.mysql.jdbc.Driver
log4j.appender.jdbcAppender.user=root
log4j.appender.jdbcAppender.password=
log4j.appender.jdbcAppender.sql=INSERT INTO LOG4J (Message) VALUES (' %d %c %p %m ')
输出到数据库需要引入jar包:mysql-connector-java-5.1.36.jar
maven依赖如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
输出格式
log4j.appender.consoleAppender.layout.ConversionPattern= %p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
%p:日志信息级别
%d{}:日志信息产生时间
%c:日志信息所在地(类名)
%m:产生的日志具体信息
%n:输出日志信息换行
%l:所在的类名以及方法,行数
输出布局
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
为不同的Appender设置日志输出级别
log4j.appender.fileAppender.Threshold = ERROR