您的位置:首页 > 编程语言 > Java开发

log4j使用详解

2017-03-23 22:03 260 查看
一、文章说明

本文主要对log4j的常用功能及使用进行详细说明,并进行代码展示。本人对log4j的使用是基于maven构建的web项目。

二、log4j简介

log4j是Apache的一个开源项目,是用Java编写的可靠,快速和灵活的日志框架。 

log4j可以通过配置,设置日志的输出级别(如:info、debug等)、输出的目的地(如:数据库、文件、控制台等)。

三、log4j核心配置详解

这里主要对log4j的日志级别、appender、格式化类型、日志格式化参数进行说明。

1.日志级别

日志级别及其优先级:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF,低于当前日志设置级别的日志不会输出。

All:所有日志级别

DEBUG :程序调试级别

INFO :程序运行信息级别

WARN :警告级别

ERROR :错误级别

FATAL :致命的错误级别,有可能应用终止服务

OFF:关闭日志,最高等级

2.appender

常用appender(其他类型请查阅资料):

ConsoleAppender 输出日志到控制台

FileAppender 输出日志到文件

DailyRollingFileAppender 输出日志到按一定的频度滚动日志记录文件

JDBCAppender  记录日志到数据库

SMTPAppender  邮件发送日志

appender的常用属性:layout 日志格式化、threshold  当前日志配置的日志级别

3.格式化类型

HTMLLayout   以html表格的形式

PatternLayout   自定义的形式输出日志

SimpleLayout   简单形式,只打印日志级别和渲染后的信息

XMLLayout 以xml的形式展现

TTCCLayout  包含日志产生的时间、线程、类别等信息

4.日志格式化参数

%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
%l 输出日志事件的发生位置,及在代码中的行数。

四、log4j使用详解及示例

log4j配置文件有xml和properties两种形式,这里只对properties的形式进行说明。

1.maven依赖包管理

这里使用的是log4j版本是1.2.17

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>mailapi</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>smtp</artifactId>
<version>1.4.4</version>
</dependency>


2.log4j.properties配置

log4j默认从classpath下寻找log4j.properties文件,如果该文件放在自定义目录下,需要在web.xml中进行配置,这里使用的是spring的类进行监听,配置如下:

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>


log4j.properties主要配置了控制台、按照一定频度滚动的日志文件、数据库及邮件形式的日志,

rootLogger,这个配置是必须的,它定义如下:

log4j.rootLogger=日志级别,日志输出形式1,日志输出形式2.....

appender,这个配置也是必须的,控制日志的输出,它的定义如下:

log4j.appender.日志输出形式=appender

logger  自定义日志,这个不是必须的

log4j.logger.自定义日志名称=日志级别,日志输出形式1,日志输出形式2.....

代码如下:

#日志文件存放目录
logPath=/work/app/logs

log4j.rootLogger=info,stdout

#控制台日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.threshold=info
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %C:%L - %m%n

#文件日志
##错误级别的日志文件
log4j.logger.error=error,error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.threshold=error
log4j.appender.error.datePattern=.yyyy-MM-dd
log4j.appender.error.append=true
log4j.appender.error.BufferedIO=false
log4j.appender.error.BufferSize=104857600
log4j.appender.error.file=${logPath}/error_log.log
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %C:%L - %m%n

##info级别的日志文件
log4j.logger.info=info,info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.th
9c1f
reshold=info
log4j.appender.info.datePattern=.yyyy-MM-dd
log4j.appender.info.append=true
log4j.appender.info.BufferedIO=false
log4j.appender.info.BufferSize=104857600
log4j.appender.info.file=${logPath}/info_log.log
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %C:%L - %m%n

#数据库日志
log4j.logger.database=info,database
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.threshold=info
log4j.appender.database.URL=oracleURL
log4j.appender.database.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.database.user=
log4j.appender.database.password=
log4j.appender.database.sql=INSERT INTO TABLE_NAME VALUES('%p %C:%L - %m%n')
log4j.appender.database.layout=org.apache.log4j.PatternLayout

#邮件日志
log4j.logger.email=info,email
log4j.appender.email=org.apache.log4j.net.SMTPAppender
log4j.appender.email.threshold=info
log4j.appender.email.BufferSize=1024
log4j.appender.email.SMTPHost=
log4j.appender.email.SMTPPort=
log4j.appender.email.SMTPUsername=
log4j.appender.email.SMTPPassword=
log4j.appender.email.From=
log4j.appender.email.To=
#log4j.appender.email.cc=
log4j.appender.email.Subject=
log4j.appender.email.layout=org.apache.log4j.PatternLayout
log4j.appender.email.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %C:%L - %m%n


3.日志使用

public class Log4jUtil {

public static final String FILE_INFO_LOG = "info";

public static final String FILE_ERROR_LOG = "error";

public static final String EMAIL_LOG = "email";

public static final String DB_LOG = "database";

public static final String CONSOLE_LOG = "stdout";

//info级别的日志文件
public static Logger fileInfoLog = Logger.getLogger(FILE_INFO_LOG);

//error级别的日志文件
public static Logger fileErrorLog = Logger.getLogger(FILE_ERROR_LOG);

//邮件发送日志
public static Logger emailLog = Logger.getLogger(EMAIL_LOG);

//记录日志到数据库
public static Logger dbLog = Logger.getLogger(DB_LOG);

//控制台打印日志
public static Logger consoleLog = Logger.getLogger(CONSOLE_LOG);

}
Log4jUtil.fileErrorLog.error("for test");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  日志 log4j java