JDK自带库
// 获取全局 Logger(名称是 global)
Logger logger = Logger.getGlobal();
// 获取自定义名称 Logger
Logger logger = Logger.getLogger("zc_logger");
// 7个日志级别
logger.severe("severe msg");
logger.warning("warning msg");
logger.info("info msg");
logger.config("config msg");
logger.fine("fine msg");
logger.finer("finer msg");
logger.finest("finest msg");
// 修改日志级别(打印全部级别日志)
logger.setLevel(Level.ALL);
// 修改日志级别(比 INFO 严重的日志会打印)
logger.setLevel(Level.INFO);
// 修改日志级别(关闭打印)
logger.setLevel(Level.OFF);
// 过滤日志(打印消息中包含 msg 字符串的日志)
logger.setFilter(record -> record.getMessage().contains("msg"));
十二月 20, 2021 5:25:39 下午 Main main
严重: severe msg
十二月 20, 2021 5:25:39 下午 Main main
警告: warning msg
十二月 20, 2021 5:25:39 下午 Main main
信息: info msg
(1)默认级别是INFO,因此,INFO级别以下的日志,不会被打印出来。
(2)Logging系统在JVM启动时读取配置文件并完成初始化,一旦开始运行main()
方法,就无法修改配置;
(3)配置不太方便,需要在JVM启动时传递参数-Djava.util.logging.config.file=
。
(4)Java标准库内置的Logging使用并不是非常广泛。
Commons Logging和Log4j
Commons Logging的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。默认情况下,Commons Loggin自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Main {
public static void main(String[] args) {
Log log = LogFactory.getLog(Main.class);
log.info("start...");
log.warn("end.");
}
}
Commons Logging,可以作为“日志接口”来使用。而真正的“日志实现”可以使用Log4j。
SLF4J和Logback
SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。
因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。