引言:
[quote]理论中浅谈,实践中理解。用例子还实践最为直接和明了的总结了。[/quote]

需求:
项目名:LogPro
文件目录

+LogPro  //项目名
- A.java
- B.java
- TestMain.java //主程序
+bbb //文件夹
-C.java
-D.java



其中,A、B、C、D四个文件中有着各自的execute的方法,方法里为日志的输出,如


public void execute(){
log.info("class A info message");
log.debug("class A debug message");
log.error("class A error message");
}



要求:


一次执行,达下下面的要求:


1、把A、B、C、D执行的日志信息输出到按制台上


2、把A、B 的日志信息以a.log的文件输出


3、把C、D 的日志信息以b.log的文件输出



具体的代码实现 :(使用的是commons-logging与log4j的结合)


public class A {
//protected Logger log = Logger.getLogger(A.class.getName());
protected Log log = LogFactory.getLog(A.class); //当前的类
public void execute(){
log.info("class A info message"); //里面的A是对这条信息的标识
log.debug("class A debug message");
log.error("class A error message");
}
}


B、C、D类同上,只是有两处修改,请注意。



public class TestMain {

// protected Logger log = Logger.getLogger(TestMain.class.getName());

public void execute() {
Log log = LogFactory.getLog(TestMain.class);

log.info("class TestMain info message");
log.debug("class TestMain debug message");
log.error("class TestMain error message");

A a = new A();
B b = new B();
C c = new C();
D d = new D();

a.execute();
b.execute();
c.execute();
d.execute();
}

public static void main(String[] args) {

TestMain testMain = new TestMain();
testMain.execute();
}
}


测试主类。



配置文件Log4j.properties


#print to console
log4j.rootLogger = debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t](%r %x %c) (%F:%L) - %m%n

log4j.logger.A=debug,R
log4j.logger.B=debug,R

#print to file a.log
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=a.log
# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n


log4j.logger.bbb.C=debug,R2
log4j.logger.bbb.D=debug,R2
#print to file a.log
log4j.appender.R2=org.apache.log4j.RollingFileAppender
log4j.appender.R2.File=b.log
# Control the maximum log file size
log4j.appender.R2.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R2.MaxBackupIndex=1
log4j.appender.R2.layout=org.apache.log4j.PatternLayout
log4j.appender.R2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n



运行,测试成功。


这里面我用的是maven工程,里面的log4.properties是放在classpath的,所以会自动加载,输出的a.log、b.log也是用的相对地址,所以执行后也在项目文件夹里面。