sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

TaskLog 日志工具

2023-12-25
sybn

介绍

TaskLog 是针对数据场景的 log 日志封装, 基于 slf4j 日志框架, 并做出了若干调整.

TaskLog 与 slf4j 对比

  • slf4j
// logger 对象是静态变量, 无法区分日志是那一次请求生成的, toJson 函数必定会执行
private static final Logger logger = LoggerFactory.getLogger(UserDao.class)
logger.info("用户创建成功! json:{}", toJson(vo));
  • TaskLog
private static final Logger logger = LoggerFactory.getLogger(UserDao.class)
// 在 controller 中创建 TaskLog 并指定请求名称是 "来自 http://.../user.do 的日志"
TaskLog task = TaskLogFactory.startLog("来自 http://.../user.do 的日志", logger);
// 为当前请求指定随机的请求key
task.setStatusKey("" + System.currentTimeMillis());
// 如果当前 slf4j 允许打印 info 日志, 则自动将 vo 转 json 打印, 否则不触发 toJson 函数. (传入 Date 也会自动打印成 yyyy-MM-dd HH:mm:ss 格式)
task.infos("用户创建成功! json:", vo)

TaskLog 打印的日志, 会按不同的 statusKey 分别显示在不同的页面分组中.

可以很容易的看到每个请求各自的日志, 不会将不同请求的内容混在一起.

关于 stepInfos

  • 某些情况下需要批量执行某种操作, 打印大量日志的话日志会刷屏, 不打印日志又看不出进度, stepInfos 用于解决此类问题.
List<String> urlList = ... ; // 10000 条待处理数据
TaskLog task = TaskLogFactory.startLog("大批量处理数据", logger);
task.setStatusKey("" + System.currentTimeMillis());
task.setTotal(urlList.size); // 指定总任务数, 用于计算进度条总长度
for (String url : urlList) {
        task.incCurrent(1); // 进度条 +1
        HttpClientUtil.get(url); // 处理数据
        task.stepInfos("任务进度:", task); // 每 6 打印一行数据, 6 秒内多次调用只打印一行
}

setTotal 和 incCurrent 可以控制在线日志中的进度条, 即使不调用 stepInfos 在线日志的进度条也会更新.

task.stepInfos(“任务进度:”, task); 会每6秒打印一次当前的任务进度.


Similar Posts

Comments

暂不开放评论! 可微信联系