前⾔
在Java 中实现记录⽇志的⽅式有很多种,
1. 最简单的⽅式,就是system.println.out(error) ,这样直接在控制台打印消息了。
2. Java.util.logging ; 在JDK 1.4 版本之后,提供了⽇志的API ,可以往⽂件中写⽇志了。
3. log4j , 最强⼤的记录⽇志的⽅式。 可以通过配置 .properties 或是 .xml 的⽂件, 配置⽇志的⽬的地,格式等等。4. commons-logging, 最综合和常见的⽇志记录⽅式, 经常是和log4j 结合起来使⽤。Java.util.logging –JDK 记录⽇志⽅式
system.print 这就不⽤多说了,直接看⼀下Java api 中 logging ⽇志的使⽤例⼦:
import java.io.IOException; import java.util.Date;
import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Level;
import java.util.logging.LogRecord; import java.util.logging.Logger; public class TestLogJava {
public static void main(String[] args) throws IOException{ Logger log = Logger.getLogger(\"tesglog\"); log.setLevel(Level.ALL);
FileHandler fileHandler = new FileHandler(\"testlog.log\"); fileHandler.setLevel(Level.ALL);
fileHandler.setFormatter(new LogFormatter()); log.addHandler(fileHandler);
log.info(\"This is test java util log\"); } }
class LogFormatter extends Formatter { @Override
public String format(LogRecord record) { Date date = new Date();
String sDate = date.toString();
return \"[\" + sDate + \"]\" + \"[\" + record.getLevel() + \"]\" + record.getClass() + record.getMessage() + \"\\n\"; } }
这⾥是在eclipse 下code 和测试的。
⾸先定义⼀个Logeer的实例,并设置log 的级别,接着添加⼀个fileHander ,就是把⽇志写到⽂件中。在写⼊⽂件的时候,定义⼀个LogFormatter对⽇志进⾏格式的渲染。
默认状况下, ⽇志会打印到控制台。添加filehandler 后, 会同时写⼊⽂件。 如不指定路径,⽇志⽂件将位于项⽬根路径下。log4j 记录⽇志⽅式
log4j 是apache 提供的记录⽇志的jar 档。下载路径:
这⾥要做的事情稍微要多⼀些:
1. 下载log4j 的jar 包,放⼊项⽬的lib 包中(添加到项⽬的build path中)。
2. 配置log4j.properties, 并放⼊项⽬的根路径下.(也可以放⼊其他路径,在读的时候需要指定)看⼀下⼀个配置实例:
### 设置⽇志级别 ###
log4j.rootLogger=debug,stdout,logfile
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [ %p ] - [ %l ] %m%n
### 输出到⽇志⽂件 ###
log4j.appender.logfile = org.apache.log4j.RollingFileAppender log4j.appender.logfile.File = log4j.log
log4j.appender.logfile.MaxFileSize = 512KB log4j.appender.logfile.MaxBackupIndex = 3
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %p ] - [ %l ] %m%n
这⾥指定了⽇志输出的级别 debug.
stdout, logfile 指定⽇志输出的⽬的地。 这两个名字可以随便取,⽐如 A, 或B都可以。 实际的配置是 org.apache.log4j.ConsoleAppender 和RollingFileAppender ⽤于指定是控制台还是⽂件。另外还指定了输出的格式, 已经产⽣的file 的规则。3.测试java ⽂件
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator; public class TestLog4j {
public static void main(String[] args) { // 1. create log
Logger log = Logger.getLogger(TestLog4j.class); // 2. get log config file
PropertyConfigurator.configure(\"log4j.properties\"); // 3. start log
log.debug(\"Here is some DEBUG\"); log.info(\"Here is some INFO\"); log.warn(\"Here is some WARN\"); log.error(\"Here is some ERROR\"); log.fatal(\"Here is some FATAL\"); }
配置稍显⿇烦,但是code 时就简单多了。commons-logging写⽇志⽅式
Commons-logging 也是Apache 提供的⽇志jar 档。下载地址:
你有可能要问为什么有了log4j还有提供Commons-logging呢? 这两者有什么区别吗?
其实从Commons-logging这个名字就可以看出来, 这应该是⼀个⽇志的共⽤接⼝。实际上, 它的确是这样⼀个作⽤,使⽤Commons-logging的LogFactory获取⽇志处理类时:
1) ⾸先在classpath下寻找⾃⼰的配置⽂件commons-logging.properties,如果找到,则使⽤其中定义的Log实现类;
2) 如果找不到commons-logging.properties⽂件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使⽤其定义的Log实现类;
如果在Tomact中可以建⽴⼀个叫 CATALINA_OPTS 的环境变量,给他的值:
Dorg.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLogDorg.apache.commons.logging.simplelog.defaultlog = warn
3) 否则,查看classpath中是否有Log4j的包,如果发现,则⾃动使⽤Log4j作为⽇志实现类;4) 否则,使⽤JDK⾃⾝的⽇志实现类(JDK1.4以后才有⽇志实现类);
5) 否则,使⽤commons-logging⾃⼰提供的⼀个简单的⽇志实现类SimpleLog;
先使⽤第⼀种⽅式来看⼀个实例,配置commons-logging.properties, 使⽤log4j来记录⽇志。注意, commons-logging 要配合log4j 记录⽇志,必须把log4j的jar 包也导⼊到项⽬中。1. 导⼊log4j 和commons-logging的jar 包
2. 配置commons-logging.properties 和 log4j.properties, 放⼊项⽬的classpath下(也就是src⽬录下)注意: 单独使⽤log4j 的时候,log4j.properties 默认是放在项⽬的根⽬录下。log4j.properties 的内容和上⾯完全相同。
看⼀下commons-logging.properties 的配置,⼀句话,指定使⽤log4j
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
3.测试代码:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class TestLogCom {
static Log log = LogFactory.getLog(TestLog.class); public static void main(String[] args) { log.debug(\"Here is some DEBUG\"); log.info(\"Here is some INFO\"); log.warn(\"Here is some WARN\"); log.error(\"Here is some ERROR\"); log.fatal(\"Here is some FATAL\"); } }
除了使⽤log4j 之外, 还可以配置
org.apache.commons.logging.impl.Jdk14Logger 使⽤JDK1.4。
org.apache.commons.logging.impl.Log4JLogger 使⽤Log4J。
org.apache.commons.logging.impl.LogKitLogger 使⽤ avalon-Logkit。
org.apache.commons.logging.impl.SimpleLog common-logging⾃带⽇志实现类。它实现了Log接⼝,把⽇志消息都输出到系统错误流System.err 中。
org.apache.commons.logging.impl.NoOpLog common-logging⾃带⽇志实现类。它实现了Log接⼝。 其输出⽇志的⽅法中不进⾏任何操作。总结
以上有⼀条
3) 否则,查看classpath中是否有Log4j的包,如果发现,则⾃动使⽤Log4j作为⽇志实现类;
项⽬同时导⼊log4j 和commons-logging的jar 包, 不需要配置commons-logging.properties ,只需要在classpath中配置 log4j.properties就可以使⽤log4j的⽅式记录⽇志。这也是⽬前⽤的⽐较多的记录⽇志的⽅式。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务