首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

log4j入门-学习札记

2013-07-16 
log4j入门-学习笔记log4j是Apache开源的日志框架,目前最新的版本为?1.2.XX?2.0.XX版本正在开发中,没有发

log4j入门-学习笔记
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.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

log4j.appender.CONSOLE.Encoding=GBK

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

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

?

#记录到文件

log4j.appender.FILE=org.apache.log4j.FileAppender

log4j.appender.FILE.File=file.log

log4j.appender.FILE.Append=false

log4j.appender.FILE.Encoding=UTF8

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

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

?

#记录到回滚文件

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Threshold=WARN

log4j.appender.ROLLING_FILE.File=file.log

log4j.appender.ROLLING_FILE.Append=true

log4j.appender.ROLLING_FILE.Encoding=GBK

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=%p?%t?%c?-?%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=%p?%t?%c?-?%m%n

?

#将日志保存到数据库

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.Threshold=INFO

log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4j

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=%p?%t?%c?-?%m%n

?

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

热点排行