今天研究了一下午 commons-logging+log4 日志工具,终于有了很大的眉目、下面我把整个简单的实例 帖出来、为以后参考。
准备工作:将commons-logging 和 log4j 的 jar 包拷进 CLASSPATH(lib)目录下。
其中 com.landstech.logging包下写有 loggingTest.java 文件
1.loggingTest.java 文件
package com.landstech.logging;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;
public class loggingTest {
Log log = LogFactory.getLog(loggingTest.class);
/*
* 如果不使用默认的 log4j.properties 也可以使用PropertyConfigurator 指定配置文件路径
*/
//PropertyConfigurator.
public void loading(){
/*
* 1. trace
* 2. debug
* 3. info
* 4. warn
* 5. error
* 6. fatal
*/
String Str = null;
try{
int InLength = Str.length();
System.out.println("Test End!");
}catch( Exception e){
log.debug("debug 信息 ");
log.error("error 信息 ");
log.info("info 信息 ");
log.fatal("fatal 信息 ");
}
}
}
2.commonsLoggingTest.jsp 文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="com.landstech.logging.loggingTest" %>
<%
loggingTest logIns = new loggingTest();
logIns.loading();
%>
3. commons-logging.properties 文件指定Log4JLogger 日志工具
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
4.log4j.properties 文件
#rootLogger 根记录器
log4j.rootLogger=ERROR,console,f1
#Logger
#log4j.logger.com.landstech.logging.loggingTest=DEBUG
#category 类别配置
#log4j.category.com.landstech.logging=DEBUG
#Appenders
#console 控制台输出
log4j.appender.console=org.apache.log4j.ConsoleAppender
#file 文件输出
#[FileAppender:普通文件输出 | RollingFileAppender:输出到按大小滚动文件 | DailyRollingFileAppender:输出到按日期滚动文件]
log4j.appender.f1=org.apache.log4j.RollingFileAppender
#log4j.appender.f1=org.apache.log4j.FileAppender
#log4j.appender.f1=org.apache.log4j.DailyRollingFileAppender
# must :\\ if is :\ is false
log4j.appender.f1.File=H:\\loggingTest.log
#log4j.appender.f1.File=H:\\log.html # 使用HTMLLayout时
log4j.appender.f1.Append=true
log4j.appender.f1.Encoding=UTF-8
log4j.appender.f1.MaxFileSize=200KB
#Layout
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%C]-[%p] %m%n
#PatternLayout 表达式布局
log4j.appender.f1.layout=org.apache.log4j.PatternLayout
log4j.appender.f1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%C]-[%p] %m%n
#HTMLLayout HTML布局
#log4j.appender.f1.layout=org.apache.log4j.HTMLLayout
#其他: XMLLayout XML布局
#log4j.appender.f1.layout=org.apache.log4j.xml.XMLLayout
访问jsp文件在控制台上打印出:
2012-08-09 01:12:19 [com.landstech.logging.loggingTest]-[ERROR] error 信息
2012-08-09 01:12:19 [com.landstech.logging.loggingTest]-[FATAL] fatal 信息
同时在H盘目录下有生成 loggingTest.log 日志文件
文件内容与控制台上打印的内容一致
============================================新增加的:继续昨天遗漏的地方=================================
我们也可以定义记录器的名字
如在log4j.properties 中
#define a logger named ImportEBOMLogger
log4j.logger.ImportEBOMLogger=ERROR,file1
..............
.............
这洋的好处就是 在实例一个logger 对象时 可以直接根据记录器的名字来确定选用哪个记录器
如: 在jsp代码中就可以这洋:
<%
Logger log = Logger.getLogger("ImportEBOMLogger");
PropertyConfigurator.configure("log4j.properties");
log.error("Can only choose Excel files! Please choose again");
%>
--------------------------
Logger组件的继承性
Log4J提供了一个root Logger,它是所有Logger组件的“祖先”,它永远存在,且不能通过名字检索或引用,通过Logger.getRootLogger()方法取得它。配置root Logger代码:
log4j.rootLogger=INFO,console
可在配置文件中方便地配置存在继承关系的Logger组件,凡是在符号“.”后面的组件都会成为在符号“.”前面的Logger组件的子类。例如:
log4j.apache.myLogger=WARN
log4j.apache.myLogger.mySonLogger=,file
以上代码中, mySonLogger是myLogger的子类Logger组件。Logger组件的继承关系:
. 如果子类Logger组件没有定义日志级别,则将继承父类的日志级别;
. 如果子类Logger组件定义了日志级别,就不会继承父类的日志级别;
. 默认情况下,子类Logger组件会继承父类所有的Appender,把它们加入到自己的Appener;
. 如果把子类Logger组件的additivity标志设为false,那么它就不会继承父类Appender。additivity标志 默认值为false;
Layout组件的补充:
Layout组件决定日志输出格式,有以下几种类型:
. org.apache.log4j.HTMLLayout(以HTML表格形式布局);
. org.apache.log4j.PatternLayout(可以灵活地指定布局模式);
. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串);
. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);
org.apache.log4j.xml.XMLLayout(以xml格式布局)
Appender组件补充:
Appender组件决定将日志信息输出到什么地方。支持以下目的地:
. 控制台(Console);
. 文件(File);
. GUI组件(GUI component);
. 套接口服务器(Remote socket server);
. NT的事件记录器(NT Event Logger);
. UNIX Syslog守护进程(Remote UNIX Syslog daemon);
一个Logger可同时对应多个Appender,示例:myLogger配置二个Appender: 一个file, 一个是console:
log4j.logger.myAppender=WARN,file,console
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.txt
log4j.apender.console=org.apache.log4j.ConsoleAppender