日志框架


日志介绍

日志分类

  • 调试日志
  • 系统日志

作用

  • 格式化日志输出
  • 控制输出位置
  • 日志优化:异步、归档压缩
  • 日志系统维护
  • 日志门面

日志框架

在这里插入图片描述

日志门面:

  • JCL(Jakarta Commons Logging)
  • slf4j(Simple Logging Facade for Java)

日志实现:

  • JUL(Java Util Logging)
  • logback
  • log4j
  • log4j2

JUL

硬编码

Logger logger = Logger.getLogger("LogTest.test");
// 硬编码
SimpleFormatter simpleFormatter = new SimpleFormatter();

ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(simpleFormatter);

FileHandler fileHandler = new FileHandler("jul.log");
fileHandler.setFormatter(simpleFormatter);

logger.addHandler(consoleHandler);
logger.addHandler(fileHandler);

logger.setLevel(Level.FINE);

logger.severe("severe msg");
logger.warning(":warning msg");
logger.info("info msg");
logger.config("config msg");
logger.fine("fine msg");

Logger对象父子关系

根据包名确定父子关系,顶级Logger为java.util.logging.LogManager$RootLogger

Logger logger = Logger.getLogger("com");
System.out.println(logger.getParent());

配置文件

 String fname = System.getProperty("java.util.logging.config.file");
 if (fname == null) {
     fname = System.getProperty("java.home");
     if (fname == null) {
         throw new Error("Can't find java.home ??");
     }
     File f = new File(fname, "lib");
     f = new File(f, "logging.properties");
     fname = f.getCanonicalPath();
 }

执行流程

在这里插入图片描述

Log4j

依赖

 <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.17</version>
 </dependency>
BasicConfigurator.configure();

Logger logger = Logger.getLogger(TestLog4j.class);

logger.fatal("fatal msg");
logger.error("error msg");
logger.warn("warn msg");
logger.info("info msg");
logger.debug("debug msg");
logger.trace("trace msg");

主要组件

  • Loggers(控制日志级别)
  • Appenders(输出方式)
  • Layout(输出格式)

Appenders

  • ConsoleAppender
  • FileAppender
  • DailyRollingFileAppender
  • RollingFileAppender
  • JDBCAppender

Layout

  • HTMLLayot
  • SimpleLayout
  • PatternLayout

配置文件

log4j.properties

log4j.rootLogger = trace,console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.SimpleLayout

JCL

在这里插入图片描述
依赖

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

在这里插入图片描述

Log log = LogFactory.getLog(JCLTest.class);
log.info("hello");

被淘汰:无法兼容新的日志框架

SLF4J

        <!--slf4j的日志门面-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.26</version>
        </dependency>
        <!--slf4j的内置的简单实现-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.21</version>
        </dependency>

简单入门

    public static final Logger logger = LoggerFactory.getLogger(TestSLF4J.class);

    @Test
    public void test() {
        logger.info("hello");
        logger.info("参数:{}", "xxx");
        logger.error("错误:", new Exception("error"));
    }

日志绑定

在这里插入图片描述

桥接器(Briger)

在这里插入图片描述
同一个日志实现的适配器和桥接器不能同时出现,不然死循环

LogBack

依赖

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.26</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

Log4j2

依赖

        <!--log4j2门面-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!--log4j2实现-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>

Slf4j + Log4j2

	    <!--slf4j的日志门面-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.26</version>
        </dependency>
        <!--适配器-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!--log4j2门面-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!--log4j2实现-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值