日志框架

1 背景

为了记录程序的运行信息,传统的方式,是使用 System.out.println

但是这种方式,虽然简单,却有很多缺点:

  1. 无法对日志的输出,做有效的控制
  2. 效率不够高
  3. 功能不够强,比如无法对日志进行自动格式化输出
  4. 输出的目的地比较单一,只能输出在控制台

比如,要对日志的输出与否做控制,可以做简单的封装:

public class LogUtil {
    private static boolean logSwitch = true;

    public static void log(String msg) {
        if (logSwitch) {
            System.out.println(msg);
        }
    }
}

// Logutil.log("ksdjksdjfjk");

对于更复杂的情况,需要进一步封装。

对于一个通用的日志空间,至少需要以下概念:

  • logger,日志对象,使用它产生日志记录
  • level,日志级别,用来控制日志的显示与否
  • formatter/render/layout,日志格式,用来控制日志输出的格式、样式
  • handler/appender,处理器,用来将日志输出到相应目的地(屏幕?文件?数据库?)

2 java.util.logging

Java 自带的日志框架。

基本使用:

public static Logger logger = LogManager.getLogger(A.class);

public void test() {
    logger.info("A.info");
    logger.warning("A.warning");
    logger.severe("A.servere");
    logger.fine("A.fine");
}

3 Apache Common-Logging 接口

4 SLF4j 接口

5 Log4j

6 SLF4j + Logback

在 pom.xml 中添加:

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
</dependency>

在 classpath 下面添加 logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>
        %msg%n
      </Pattern>
    </layout>

    <!-- mybatis 的设置 -->
    <logger name="com.nf147.sss.dao" level="debug" additivity="false">
      <appender-ref ref="STDOUT" />
    </logger>

    <root level="error">
      <appender-ref ref="STDOUT" />
    </root>
</configuration>

Author: unname

Created: 2019-03-22 周五 01:32

Go ahead, never stop.