转载:https://www.cnblogs.com/huahua035/p/8022010.html
日志系统:
日志的具体实现。经典的有:
- log4j
- JDK Logging;
- 还有log4j作者推出的被高度评价的logBack等等;
日志框架:
如果只存在一种日志系统,日志框架完全没有必要存在(logBack无法独立使用),但事与愿违。为了解决多个日志系统的兼容问题,日志框架应运而生。主流的日志框架有:
- commons-logging
- sl4j
commons-logging:
commons-logging是apache推出的日志框架,commons-logging只是规定了日志的接口规范,默认情况下,Commons Loggin自动搜索并使用Log4j。主流的日志系统都实现了commons-logging定义的接口,common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。
commons-logging定义了6个日志级别(默认是INFO级别),从大到小是:
- FATAL
- ERROR
- WARNING
- INFO
- DEBUG
- TRACE
Commons-logging+log4j 是经典的一个日志实现方案,常见的代码如下:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
// 在静态方法中引用Log:
public class Main {
static final Log log = LogFactory.getLog(Main.class);
static void foo() {
log.info("foo");
}
}
// 在实例方法中引用Log:
public class Person {
protected final Log log = LogFactory.getLog(getClass());
void foo() {
log.info("foo");
}
}
注意到实例变量log的获取方式是LogFactory.getLog(getClass()),虽然也可以用LogFactory.getLog(Person.class),但是前一种方式有个非常大的好处,就是子类可以直接使用该log实例。例如:
// 在子类中使用父类实例化的log:
public class Student extends Person {
void bar() {
log.info("bar");
}
}
sl4j:
slf4j全称为Simple Logging Facade for JAVA,java简单日志门面。
类似于Apache Common-Logging,是对不同日志框架提供的一个门面封装,可以在部署的时候不修改任何配置即可接入一种日志实现方案。但是,他在编译时静态绑定真正的Log库。使用SLF4J时,如果你需要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合
logback+sl4j也是经典的一个日志实现方案。Logback作为一个通用可靠、快速灵活的日志框架,将作为Log4j 的替代和SLF4J 组成新的日志系统的完整实现。Logback必须配合sl4j使用。由于logback和sl4j是同一个作者,其兼容性不言而喻。但sl4j面临与其他日志框架和日志系统的兼容性问题。常见代码如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class A {
private static Log logger = LogFactory.getLog(this.getClass());
}
常用的级别:
- FATAL
- ERROR
- WARNING
- INFO
- DEBUG