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文件格式的配置,可参考相关文档,不在此记录。