日志组件

日志记录功能在开发中很常用,不仅可以记录程序运行的细节,方便调试,也可以记录用户的行为,是框架中不可或缺的组件。 为最大程度复用现有的组件,我们就地取材使用了 JDK 自带的 JUL( java.util.logging)作为日志组件,并对其进行功能上的增强, 同时整合了 Slf4J 语法风格,使用上也更便捷,可结合 Lombok 强大的功能,在类身上施加一个注解即可。

组件源码在: https://gitee.com/sp42_admin/ajaxjs/tree/master/aj-backend/aj-framework/aj-framework/src/main/java/com/ajaxjs/util/logger

调用例子

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Slf4j
public class TestSlf4J {
    @Test
    public void test() {
        Logger logger = LoggerFactory.getLogger(TestSlf4J.class);
        logger.info("Hello World 1");

        log.info("Hello World 2");
        log.info("Hello {}, it's {} day.2", "Frank", "good");
        log.info("Hello {}, it's {} day{}2", "Frank", "good", "?");

        log.debug("Hello World3");
        log.debug("Hello {}, it's {} day.3", "Frank", "good");
        log.debug("Hello {}, it's {} day{}3", "Frank", "good", "?");

        log.warn("Hello {}, it's {} day{}4", "Frank", "good", "?");
    }
}        

可见,根据不同的日志等级,有不同颜色的输出日志。

不使用 Slf4J

传统方式创建 LOGGER 实例。

import com.ajaxjs.util.logger.LogHelper;

public class TestLogHelper {
    // 创建类成员为日志服务
    private static final LogHelper LOGGER = LogHelper.getLog(TestLogHelper.class);

    public void testGetLog() {
        // …… 其他代码
        LOGGER.warning("发生异常!……");
        LOGGER.info("bar");
        LOGGER.warning("foo");
        // 带有多个日志消息的对象参数,用 {0},{1},{2} 预留消息位置
        LOGGER.warning("脚本引擎 {0} 没有 {1}() 这个方法", "js", "foo");
        LOGGER.warning(new Exception("致命错误!"), "脚本引擎 {0} 没有 {1}() 这个方法", "js", "foo");
    }
}

日志保存文件

ELK 日志输出

ELK 读取的日志为本地磁盘的一个 JSON 文件,我们只要配置好 JUL 的 Handler 和 Formatter 即可完成。

原理分析

有关原理的分析,请移步至博客文章: https://zhangxin.blog.csdn.net/article/details/134070649