news 2026/8/22 15:35:59

如何用log4js优雅管理多账号日志:拆解天翼网盘自动签到Cloud189Checkin的日志记录与汇总推送设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用log4js优雅管理多账号日志:拆解天翼网盘自动签到Cloud189Checkin的日志记录与汇总推送设计

如何用log4js优雅管理多账号日志:拆解天翼网盘自动签到Cloud189Checkin的日志记录与汇总推送设计

【免费下载链接】Cloud189Checkin天翼网盘自动签到项目地址: https://gitcode.com/gh_mirrors/clo/Cloud189Checkin

Cloud189Checkin 是一个开源的天翼网盘自动签到脚本,可以一次性登录多个账号完成每日签到,并把每个账号的容量增长汇总推送到手机。多账号同时跑,日志最容易乱。这篇文章带你拆解它如何用 log4js 实现"一个账号一份日志、任务结束自动汇总推送"的完整设计,新手照着学就能给自己的多账号脚本配上干净的日志体系。

一、先看场景:多账号签到为什么会日志混乱?

Cloud189Checkin 启动时会从环境变量中读取任意数量的账号,逐个执行签到任务:

账号由accounts.jsTY_USERNAME_1TY_PASSWORD_1这类成对变量中解析(也兼容TY_ACCOUNTSJSON 方式),本地运行时也可以直接写在系统环境变量里:

如果所有账号共用一条日志流,几十个账号的"开始执行、签到成功、容量变化"会互相穿插,一旦某个账号报错,基本没法快速定位。项目的解法藏在src/logger.js里。

二、三套日志出口:log4js 的 Appender 配置拆解

src/logger.js只用了约 30 行配置,就定义了三种日志出口(Appender):

Appender类型去向作用
outconsole控制台实时查看,格式[时间] [级别] 账号: 内容
filemultiFile.logs/账号名.log每个账号独立成文件,单文件上限 10MB,保留 3 份压缩备份
vcrrecording内存只记录推送模块事件,供任务结束时回放

再配合两个 category 把它们分开:

  • default:所有账号日志同时写outfile
  • push:推送日志只写outvcr,不落文件。

核心思路一句话:业务日志按账号分文件,推送日志单独走内存通道,互不污染。

三、一个账号一个 Logger:categoryName 实现日志隔离

src/app.js的主流程里,每个账号会拿到一个以自己名字命名的 Logger:

const logger = log4js.getLogger(userName); logger.addContext("user", mask(userName, 3, 7));

这里有两个巧妙之处:

  1. Logger 名字就是账号名。file 这个 multiFile Appender 配置了property: "categoryName",日志会按 Logger 名称自动拆分文件——某个账号的日志只会出现在它自己的.log文件里,天然隔离;
  2. 日志内容里是打码账号src/utils.js中的mask(userName, 3, 7)会把手机号中间几位替换成*,文件落盘和推送内容都不会泄露完整账号。

签到过程中,开始执行个人签到任务: 获得 XXM 空间执行完毕, 耗时 X.XX 秒,以及最后的容量变化(⬆️ 个人容量 / 家庭容量)都会写进对应账号的日志。其中家庭容量对应的就是天翼网盘里的家庭管理空间:

四、任务收尾:日志汇总 + 多通道推送

最精彩的部分在src/app.js末尾。主流程结束后,脚本不会直接退出,而是做了一次"日志大汇总":

  1. delay(1000):等待异步的日志文件真正写完;
  2. catLogs():读取.logs/下所有文件,拼成一份完整的签到报告;
  3. recording.replay():从内存通道取出所有"推送成功/失败"事件;
  4. push("天翼云盘自动签到任务", 日志 + 推送事件):一键发出汇总通知;
  5. recording.erase()+cleanLogs():清空内存记录、删除本地日志文件。

推送模块src/push/index.js支持 Server 酱、Telegram Bot、企业微信群机器人、WxPusher、PushPlus、Bark、ShowDoc 共 8 个通道,配了环境变量就发送,没配置自动跳过——同一份汇总日志可以多端收到。

之所以每次跑完就删日志,是因为签到任务是定时重复执行的(每天一次)。"汇总推送 → 清理现场"让日志的生命周期和任务完全对齐,本地永远不会堆积文件。

五、4 个可以直接借鉴的细节 💡

  1. 按账号隔离getLogger(账号名)+ multiFile,多账号脚本日志不串线;
  2. 敏感信息打码:日志里只出现189****5716,而不是完整手机号;
  3. 推送日志与业务日志分离:推送结果走 recording 内存 Appender,不污染账号日志,最后还能回放拼进汇总报告;
  4. 日志随任务清理catLogs汇总 → 推送 →cleanLogs删除,非常适合每日定时任务场景。

小结

Cloud189Checkin 用 log4js 的多 Appender + 按账号 Logger 的组合,完美适配了多账号天翼网盘自动签到场景:日志分文件好排查、账号打码更安全、汇总推送让手机上直接看到每个账号的签到结果。依赖只需引入 log4js 一个包,实现成本极低,非常值得做多账号脚本的同学参考src/logger.jssrc/app.js的实现。

【免费下载链接】Cloud189Checkin天翼网盘自动签到项目地址: https://gitcode.com/gh_mirrors/clo/Cloud189Checkin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 15:35:14

用QClaw打造个人影评小助理:我花半小时做了个新春热榜电影网页

从“看电影不知道选哪部”到“拥有专属影评助手”,我只用了30分钟QClaw电影达人福音,玩出花的懒人攻略。📖 前言过年那段时间,电影院里扎堆上了好几部大片,朋友群里每天都是“《热辣滚烫》好看吗?”“《飞驰…

作者头像 李华