日志记录功能在开发中很常用,不仅可以记录程序运行的细节,方便调试,也可以记录用户的行为,是框架中不可或缺的组件。 为最大程度复用现有的组件,我们就地取材使用了 JDK 自带的 JUL( java.util.logging)作为日志组件,并对其进行功能上的增强, 同时整合了 Slf4J 语法风格,使用上也更便捷,可结合 Lombok 强大的功能,在类身上施加一个注解即可。
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", "?"); } }
可见,根据不同的日志等级,有不同颜色的输出日志。
传统方式创建 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 读取的日志为本地磁盘的一个 JSON 文件,我们只要配置好 JUL 的 Handler 和 Formatter 即可完成。
有关原理的分析,请移步至博客文章: ↗ https://zhangxin.blog.csdn.net/article/details/134070649。