日志管理
项目运行时模块提供了项目日志收集,检索和保存查询方案等功能。
体验地址: http://119.163.197.219:13456/view/runtime/index.html#/log/aioLogPage
沟通加QQ群 : 908377977
gitee 开源地址 : https://gitee.com/aiocode/aio-runtime
github开源地址 : https://github.com/codeisangel/aio-runtime
日志模块使用Lucene全文本检索引擎提供日志的存储与检索,Lucene单个索引库能提供在200万以内的日志范围提供1000行日志的秒以内的写入能力,日志模块默认一个小时创建一个所以库,因此一天2000万级别日志,轻松拿捏。
日志默认保存90天。
日志查询
日志查询页面截图如下 :
日志查询可以通过 类名,方法名,追踪码,日志级别 ,发生时间,标记,线程名,内容,MDC查询
追踪码
追踪码可以用于还原请求的处理过程。servlet服务一个请求对应一个线程,追踪吗使用ThreadLocal
方式使追踪码与线程相关联。
同时可以通过获取当前线程的追踪码
TraceId.getTraceId();
可以通过AOP或者拦截器等方式将追踪码返回到前端,帮助前后端联调。前端仅需要提供追踪码,后台就可以通过追踪码查询到请求的日志。
当然运行时模块也提供了接口访问记录功能,让接口访问记录与追踪码,日志相结合,更方便确认问题。
Servlet 集成追踪码
通过添加servlet拦截器TraceIdInterceptor
可以快速集成追踪码
@Slf4j
@Configuration
public class ServletWebInterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TraceIdInterceptor()).addPathPatterns("/**");
}
}
通过标记查询
日志模块提供了日志标记功能,用户可以通过如下方法为日志添加标记,
log.error(SubscribeMarker.getMarker("MappingsEndpoint"), "读取接口信息失败。MappingsEndpoint 未注入。请引入 spring-boot-starter-actuator 模块,并且开启MappingsEndpoint ");
SubscribeMarker
对象可以标记日志,标记后可以通过标记查询日志,例如上例,可以通过MappingsEndpoint
查询日志
通过内容查询
日志模块支持日志全文本检索,提议对内容添加多个内容条件 ,如下图 :
MDC查询
MDC是日志框架提供的标记日志的功能,与日志追踪码原理相同使用ThreadLocal 标记线程日志。
添加方式如下 :
MDC.put("logCreate", IdUtil.nanoId());
MDC.put("testMdc", RandomUtil.randomStringUpper(10));
查询时可以通过输入 key - value 对应的日志,MDC适合标记业务与日志的关系,例如,将 用户ID,业务流程号等与日志关联。
查询页面如下 :