JAVA项目日志管理
-
概述:
1、作用:记录行为信息,记录错误过程,方便查找历史记录,线上问题排查。
2、核心问题:记录信息过多会导致文件存储过大,打印过程消耗性能,查找问题难以快速定位;记录信息过少则在需要时无法找到问题根源,无法追踪问题。
3、需根据需求在性能,存储,信息量,查询定位做出权衡。
-
输出方式:
1、输出控制台打印,如log.info(),System.out.println();一般在开发环境使用。线上环境需关闭控制台打印日志。
2、输出至文件存储,如使用log4j,logback输出至文件,JVM启动参数中配置打印GC日志。
3、存储数据库表中,一般为项目定制日志,如数据新增,更新日志。
4、输出志中间件中,如使用ELK存储在Elasticsearch中。
-
各日志类型解决方案:
1、常规堆栈日志:如项目启动过程打印的各种初始化实例,建立连接日志。一般使用Logback,log4j2实现,log4j性能较差,一般不推荐,而门面通常使用Slf4j显示输出日志,这里贴上,(slf4j log4j logback的关系)链接,具体可以自己查看。一般常规项目使用Slf4j结合Logback实现,SpringBoot项目可以结合 Spring Boot Actuator实现日志打印及动态修改日志。
2、存储至数据库日志:最简单的实现就是接口内部直接往数据库中插入一条日志数据,这里贴一个常规建表sql语句。
CREATE TABLE `system_log` ( `id` varchar(32) NOT NULL DEFAULT '' COMMENT 'id', `