1、概述
该组件的开发目的,是试图制造一个,能够实时查阅的、高性能的、轻量级、易于使用的日志组件。
在我们的系统开发中,日志无疑是极其重要的一环。没有日志,排查错误、分析用户使用情况、追溯业务事件就无从谈起。
通常,Java web开发中,使用的日志一般是Slf4j。
private final static Logger log = LoggerFactory.getLogger(ProductService.class);
通过使用debug、info、warn、error等方法打印日志。并通过配置xml文件实现日志的归档策略。
但是,这种日志是存储于文件之中。它的体量较大。不利于实时查看。一般情况是下载整个日志文件然后进行搜索和分析。
可以理解为这种日志是比较底层的。
我希望的这种日志组件应该是,按不同的业务功能进行分组,分模块。每个模块单独记录属于它的日志,互不干扰。并且要求日志能够实时的查看,性能还需要快。
Redis映入我的眼帘。正好使用list这种结构来保存日志。
实现的效果如下:
@RedisLogOpt(component = "product", opt = "查询", spel = "'查询产品' + #params.toString() + ',结果:' + #result.toString()")
public PageInfo<Product> searchProduct(ProductSearchDto productSearchDto, Pageable pageable) {
// 某些操作
return productPage.toPageInfo();
}
其中spel是spring的spel表达式。这个RedisLogOpt注解标识了该方法所属的组件,执行的操作类型,以及其详细的日志信息。
通过spel表达式,这样的日志配置可以十分的灵活。
使用效果如下:
详细的日志:
组件在yml文件中配置:
productComp:
name: product
description: product产品增删改查
expire: 60
timeUnit: HOURS
sizeLimit: 1000
checkProportion: 0.5
从上到下,分别是组件名称、描述、日志的过期时间、日志的过期时间单位、日志的最大大小、日志达到最大大小的多少时进行过期检查。
这些属性,在界面中可以进行编辑,并且实时生效:
为了使得页面更加简洁、高性能、轻量,没有使用任何前端组件和框架,直接用h5和原生js写成。
日志除了支持注解方式使用之外,还可以通过注入组件的方式来写日志,例如以下这个定时任务:
@Resource
private RedisLogService redisLogService;
private final AtomicInteger num = new AtomicInteger(0);
@Scheduled(fixedDelay = 500)
public void createLog() {
// 半秒写一个日志
redisLogService.log("test", "定时任务",
"这是一个测试定时任务,啦啦啦啦啦啦!" + num.getAndIncrement());
}
通过这种方式,可以使得日志的记录更加的灵活,随心所欲的记录自己想要的内容。
不同的日志会被记录在不同的组件,通过点击“选中”来查看对应组件的日志。
如上图,选中的是“test”的组件。
组件的日志会实时刷新,可以配置要呈现的日志区间,和刷新频率,应用之后就会实时生效:
未完待续!
版权声明
本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途
评论区#
还没有评论哦,期待您的评论!
引用发言