标签:
摘要:log4j框架是一个非常有用、易用的、开源的日志记录工具。本文主要介绍log4j的配置文件写法,并附上把日志信息写到控制台、文件、数据库的简单例子。
一、 安装Log4j
Log4j网址:http://logging.apache.org/log4j/1.2/
只需要把Log4j的jar包拷进lib就行。
二、 配置文件写法
Log4j配置文件配置思路主要围绕这三部分展开,它们分别是:根目录、目的地和输出样式。
记住三个类:Logger(完成日志记录,设置日志信息级别)、Appender(决定日志去向,终端、DB、硬盘)、Layout(决定日志输出的样式)
(一)Properties配置文件(键=值)
1、根目录
根目录是用来配置等级(Level)和根的,其语法格式为:
log4j.rootLogger=[level],appenderName,appenderName,…
关于level的优先级:
level是日志记录的优先级,可以是OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL、自定义级别。优先级的从高到低的顺序为:ERROR、WARN、INFO、DEBUG。(举例子:如果选的是WARN,则日志会记录自身及比它优先级高的项,即:ERROR、WARN)
关于appender:
appender用于区分不同的输出,它是可以任意命名的,如果你既想在日志文件输出,又想在控制台输出,那么就要设置两个appender了。
例子:
log4j.rootLogger=ERROR, appender1
log4j.rootLogger=INFO, appender2, appender3
2、目的地
顾名思义,目的地就是设定日志输出的地方,其格式为:
log4j.appender.appenderName=fully.qualified.name.of.appender.class
log4j.appender.appenderName.option=valueN
例子:
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=./logs/log4jDemo.log
3、输出样式
输出样式的的格式和配置目的地一样:
log4j.appender.appenderName=fully.qualified.name.of.appender.class
log4j.appender.appenderName.option=valueN
例子:
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
(二)XML配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="appender4" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="./logs/log4jDemo2.html" /> <param name="MaxFileSize" value="1MB" /> <param name="MaxBackupIndex" value="5" /> <layout class="org.apache.log4j.HTMLLayout"> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="appender4" /> </root> </log4j:configuration>
三、 配置解析
1、log4j.rootLogger=[日志级别], appender1, appender2
1)rootLogger默认对整个工程有效。
2)若只想对某个包有效:log4j.logger.package_name=info, package1
3)若要提高性能,可以对先进行判断:
if(log.isDebugEnabled()) { log.debug("DEBUG!"); }
2、log4j.appender.appender1=org.apache.log4j.日志输出地
1)ConsoleAppender(控制台)
2)FileAppender(文件)
3)DailyRollingFileAppender(每天产生一个日志文件)
4)RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
5)WriteAppender(将日志信息以流格式发送到任意指定的地方)
6)JDBCAppender(将日志信息保存到数据库中)
3、log4j.appender.appender1.File=文件目录及文件
4、log4j.appender.appender1.MaxFileSize=最大文件大小
5、log4j.appender.appender1.MaxBackupIndex=备份文件个数
6、log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式(目前这个我不知道怎么用)
7、log4j.appender.appender1.layout=org.apache.log4j.日志样式
1)HTMLLayout
2)SimpleLayout(日志信息级别、信息字符串)
3)TTCCLayout(日志产生时间、执行绪[执行的线程]、类别等)
4)PatternLayout(灵活地指定布局格式,常用)
8、log4j.appender.appender1.layout.ConversionPattern=日志输出格式
Log4j ConversionPattern参数的格式含义
格式名 含义
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
9、log4j.appender.ServerDailyRollingFile.Append=true追加
四、例子
(一)全局输出到控制台、硬盘
Log4jDemo:
package com.kwan.log4jDemo; import org.apache.log4j.Logger; public class Log4jDemo { private static Logger logger = Logger.getLogger(Log4jDemo.class); public static void main(String[] args) { //记录debug级别的信息 logger.debug("Demo--This is debug message."); //记录info级别的信息 logger.info("Demo--This is info message."); //记录error级别的信息 logger.error("Demo--This is error message."); } }
1、Properties文件配置
log4j.properties
log4j.rootLogger=debug, appender1, appender2 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.PatternLayout log4j.appender.appender1.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n log4j.appender.appender2=org.apache.log4j.FileAppender log4j.appender.appender2.File=./logs/log4jDemo.log log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
结果:
1)console:
2)文件:
2、XML文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="appender3" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.SimpleLayout"> </layout> </appender> <appender name="appender4" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="./logs/log4jDemo.html" /> <param name="MaxFileSize" value="1MB" /> <param name="MaxBackupIndex" value="5" /> <layout class="org.apache.log4j.HTMLLayout"> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="appender3" /> <appender-ref ref="appender4" /> </root> </log4j:configuration>
结果:
1)console:
2)文件:
(二)全局输出到数据库
JDBCAppender类用于把日志记录写入数据库:
Property |
描述 |
bufferSize |
设置缓冲区的大小,默认大小为1。 |
driver |
设置驱动程序类为指定的字符串。如果没有指定驱动程序类,默认为sun.jdbc.odbc.JdbcDriver |
layout |
设置要使用的布局。默认布局是org.apache.log4j.PatternLayout |
password |
|
sql |
指定SQL语句在每次记录事件时执行。 |
URL |
设置JDBC URL |
user |
设置数据库用户名 |
1、创建表(使用的是Oracle数据库)
create table log4jDemo ( logDate date not null, logger varchar(50) not null, logLevel varchar(10) not null, message varchar(1000) not null );
2、Properties文件
log4j.rootLogger=debug, appender5 log4j.appender.appender5=org.apache.log4j.jdbc.JDBCAppender log4j.appender.appender5.URL=jdbc:oracle:thin:@localhost:1521:orcl log4j.appender.appender5.driver=oracle.jdbc.driver.OracleDriver log4j.appender.appender5.user=kwan log4j.appender.appender5.password=12345678 log4j.appender.appender5.sql=INSERT INTO log4jDemo VALUES(to_date(‘%d{yyyy-MM-dd hh:mm:ss}‘, ‘YYYY-MM-DD hh:mi:ss‘) ,‘%C‘,‘%p‘,‘%m‘) log4j.appender.appender5.layout=org.apache.log4j.PatternLayout
结果:
3、XML文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="appender6" class="org.apache.log4j.jdbc.JDBCAppender"> <param name="URL" value="jdbc:oracle:thin:@localhost:1521:orcl" /> <param name="driver" value="oracle.jdbc.driver.OracleDriver" /> <param name="user" value="kwan" /> <param name="password" value="12345678" /> <param name="sql" value="INSERT INTO log4jDemo VALUES(to_date(‘%d{yyyy-MM-dd hh:mm:ss}‘, ‘YYYY-MM-DD hh:mi:ss‘) ,‘%C‘,‘%p‘,‘%m‘)" /> <layout class="org.apache.log4j.PatternLayout"> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="appender6" /> </root> </log4j:configuration>
结果:(很遗憾,我这个写法未能成功把日志信息写入Oracle数据库,等以后想起是什么原因再补充吧,现在把报错贴下来。报错显示的是ORA-00900: 无效 SQL 语句,Properties使用一样的语句为什么就可以呢?想不明白,等以后想明白了再补充吧。)
console:
五、参考资料
标签:
原文地址:http://www.cnblogs.com/cheuk-kwan/p/4771222.html