log4j是Apache开源的日志框架,目前最新的版本为 1.2.XX; 2.0.XX版本正在开发中,没有发布正式版本.

 

日志信息非常重要:开发阶段,很有必要打印出一些重要的信息,和变量值等,便于功能调试;而产品阶段,项目运行稳定,需要记录敏感的修改信息,无须打印很多的日志信息,因而需要将日志信息去掉;因此,能够控制日志级别,对于项目开发来说,非常的重要。

 

代码中添加日志输出,肯定要消耗一部分资源,降低代码的运行效率。因此,使用高效率的日志框架很有必要。

目前,Log4j之父又开发了一款新的日志框架--logback,替换原来的log4j。

logback执行效率要比log4j高出许多,而且资源占用较少。

 

简单入门

使用log4j非常简单,按照一下步骤即可成功使用Log4j:

1. 引入log4j的jar包;使用Maven时,依赖如下:

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.17</version>

</dependency>

 

2. 创建Log4j的配置文件(默认名称为log4j.properties)

配置文件中设置了log4j日志的级别(有效值为:debug,info,warn,error);日志输出的位置(控制台,文件,数据库等地方);以及日志的格式;

log4j.properties文件内容如下:

#log4j日志级别(debug,info,warn,error),输出位置(可同时输出到多个位置)

log4j.rootLogger=debug, stdout, R

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout

#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%

 

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize= 100KB

log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

 

3. 在代码中添加以下语句,即可使用Log4j进行日志输出:

//获取日志对象

private static Logger logger = Logger.getLogger(Log4jDemo.class);

如上3,即可使用Log4j日志框架,Demo代码如下:

package com.main;

import org.apache.log4j.Logger;

 

public class Log4jDemo {

//获取日志对象

private static Logger logger = Logger.getLogger(Log4jDemo.class);

 

public static void main(String[] args) {

logger.debug("this is an debug level log");

logger.info("this is an info level log");

logger.warn("this is an warn level log");

logger.error("this is an error level log");

}

}

 

Log4j的核心

Log4j的核心为配置文件!!!

配置文件为.properties 或者 .xml 格式(一般使用.properties),默认名称为log4j;包含一下部分:

 

Logger:完成日志信息的处理,决定信息是否输出;Log4j日志的输出是按照优先级输出,当设定某一日志级别时,只有大于等于该级别的日志才会输出;日志级别有效值如下(其中最常用的为蓝色字体显式):

all < trace < debug info < warn error < fatal < off

 

Appender:设置日志信息的去向(输出位置);常用的几个输出位置如下:

org.apache.log4j.ConsoleAppender;(控制台)

org.apache.log4j.FileAppender;(文件)

org.apache.log4j.DailyRollingFileAppender;(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender;(文件达到指定大小时产生新的日志文件)

org.apache.log4j.WriterAppender;(以流的方式发送到指定地方)

org.apache.log4j.JdbcAppender;(将日志信息保存到数据库中)

 

Layout:设置日志信息的输出样式;常用的几个样式如下:

org.apache.log4j.TTCCLayout;(包含日志产生的时间,线程名称,日志级别等信息)

org.apache.log4j.SimpleLayout;(包含日志信息的级别和信息字符串)(该样式不常用)

org.apache.log4j.HTMLLayout;(HTML表格形式)

org.apache.log4j.PatternLayout;(可以灵活地指定布局模式)

 

其中PatternLayout样式最为复杂,也最为常用。Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,参数解释如下:

%m 输出代码中指定的消息;

%p 输出日志级别,DEBUG,INFO,WARN,ERROR;

%r 输出自应用启动到输出该log信息耗费的毫秒数;

%c 输出日志信息所属类的类全名;

%f 输出日志信息所属类别的类别名;

%t 输出产生该日志事件的线程名;

%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”;

%d 输出日志时间点的日期或时间,默认格式为ISO8601;也可指定格式,如:%d{yyy MMM dd HH:mm:ss};

%l 输出日志事件的发生位置:包括类,线程,以及在代码中的行数;

 

高级设置

在项目中,可能对于不同的包设置不同的日志级别,设置方法如下:

log4j.rootLogger=debug, stdout

#特殊指定com.dao包的日志级别和输出

log4j.logger.com.test=warn, R

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout

 

log4j.appender.R=org.apache.log4j.FileAppender

log4j.appender.R.File=example.log

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n  

 

几个常用的Log4j全部配置Demo

#log4j日志级别(DEBUG,INFO,WARN,ERROR),输出位置(可同时输出到多个位置)
#log4j.rootLogger=DEBUG, stdout, FILE, ROLLING_FILE, MAIL, DATABASE
log4j.rootLogger=INFO, stdout, FILE

#记录到标准输出(控制台)
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Encoding=UTF8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-dd HH:mm:ss} [%p] %l - %m%n


#记录到文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.Encoding=UTF8
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyy-MM-dd HH:mm:ss} [%p] %l - %m%n


#记录到回滚文件
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=WARN
log4j.appender.ROLLING_FILE.File=rolling_file.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.Encoding=UTF8
log4j.appender.ROLLING_FILE.MaxFileSize=10M
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d{yyy-MM-dd HH:mm:ss} [%p] %l - %m%n


#将日志发送邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=ERROR
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.SMTPHost=www.baidu.com
log4j.appender.MAIL.From=admin@163.com
log4j.appender.MAIL.To=deployer@163.com
log4j.appender.MAIL.Subject=Log4j Message
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=%d{yyy-MM-dd HH:mm:ss} [%p] %l - %m%n
 
#将日志保存到数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.Threshold=INFO
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/xxx
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=log4j
log4j.appender.DATABASE.password=log4j
log4j.appender.DATABASE.sql=INSERT INTO SYS_LOG(message) VALUES('%p %t %c - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=%d{yyy-MM-dd HH:mm:ss} [%p] %l - %m%n



使用xml文件格式的配置,可参考相关文档,不在此记录。
 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐