如何用log4js优雅管理多账号日志:拆解天翼网盘自动签到Cloud189Checkin的日志记录与汇总推送设计
【免费下载链接】Cloud189Checkin天翼网盘自动签到项目地址: https://gitcode.com/gh_mirrors/clo/Cloud189Checkin
Cloud189Checkin 是一个开源的天翼网盘自动签到脚本,可以一次性登录多个账号完成每日签到,并把每个账号的容量增长汇总推送到手机。多账号同时跑,日志最容易乱。这篇文章带你拆解它如何用 log4js 实现"一个账号一份日志、任务结束自动汇总推送"的完整设计,新手照着学就能给自己的多账号脚本配上干净的日志体系。
一、先看场景:多账号签到为什么会日志混乱?
Cloud189Checkin 启动时会从环境变量中读取任意数量的账号,逐个执行签到任务:
账号由accounts.js从TY_USERNAME_1、TY_PASSWORD_1这类成对变量中解析(也兼容TY_ACCOUNTSJSON 方式),本地运行时也可以直接写在系统环境变量里:
如果所有账号共用一条日志流,几十个账号的"开始执行、签到成功、容量变化"会互相穿插,一旦某个账号报错,基本没法快速定位。项目的解法藏在src/logger.js里。
二、三套日志出口:log4js 的 Appender 配置拆解
src/logger.js只用了约 30 行配置,就定义了三种日志出口(Appender):
| Appender | 类型 | 去向 | 作用 |
|---|---|---|---|
out | console | 控制台 | 实时查看,格式[时间] [级别] 账号: 内容 |
file | multiFile | .logs/账号名.log | 每个账号独立成文件,单文件上限 10MB,保留 3 份压缩备份 |
vcr | recording | 内存 | 只记录推送模块事件,供任务结束时回放 |
再配合两个 category 把它们分开:
- default:所有账号日志同时写
out和file; - push:推送日志只写
out和vcr,不落文件。
核心思路一句话:业务日志按账号分文件,推送日志单独走内存通道,互不污染。
三、一个账号一个 Logger:categoryName 实现日志隔离
在src/app.js的主流程里,每个账号会拿到一个以自己名字命名的 Logger:
const logger = log4js.getLogger(userName); logger.addContext("user", mask(userName, 3, 7));这里有两个巧妙之处:
- Logger 名字就是账号名。file 这个 multiFile Appender 配置了
property: "categoryName",日志会按 Logger 名称自动拆分文件——某个账号的日志只会出现在它自己的.log文件里,天然隔离; - 日志内容里是打码账号。
src/utils.js中的mask(userName, 3, 7)会把手机号中间几位替换成*,文件落盘和推送内容都不会泄露完整账号。
签到过程中,开始执行、个人签到任务: 获得 XXM 空间、执行完毕, 耗时 X.XX 秒,以及最后的容量变化(⬆️ 个人容量 / 家庭容量)都会写进对应账号的日志。其中家庭容量对应的就是天翼网盘里的家庭管理空间:
四、任务收尾:日志汇总 + 多通道推送
最精彩的部分在src/app.js末尾。主流程结束后,脚本不会直接退出,而是做了一次"日志大汇总":
delay(1000):等待异步的日志文件真正写完;catLogs():读取.logs/下所有文件,拼成一份完整的签到报告;recording.replay():从内存通道取出所有"推送成功/失败"事件;push("天翼云盘自动签到任务", 日志 + 推送事件):一键发出汇总通知;recording.erase()+cleanLogs():清空内存记录、删除本地日志文件。
推送模块src/push/index.js支持 Server 酱、Telegram Bot、企业微信群机器人、WxPusher、PushPlus、Bark、ShowDoc 共 8 个通道,配了环境变量就发送,没配置自动跳过——同一份汇总日志可以多端收到。
之所以每次跑完就删日志,是因为签到任务是定时重复执行的(每天一次)。"汇总推送 → 清理现场"让日志的生命周期和任务完全对齐,本地永远不会堆积文件。
五、4 个可以直接借鉴的细节 💡
- 按账号隔离:
getLogger(账号名)+ multiFile,多账号脚本日志不串线; - 敏感信息打码:日志里只出现
189****5716,而不是完整手机号; - 推送日志与业务日志分离:推送结果走 recording 内存 Appender,不污染账号日志,最后还能回放拼进汇总报告;
- 日志随任务清理:
catLogs汇总 → 推送 →cleanLogs删除,非常适合每日定时任务场景。
小结
Cloud189Checkin 用 log4js 的多 Appender + 按账号 Logger 的组合,完美适配了多账号天翼网盘自动签到场景:日志分文件好排查、账号打码更安全、汇总推送让手机上直接看到每个账号的签到结果。依赖只需引入 log4js 一个包,实现成本极低,非常值得做多账号脚本的同学参考src/logger.js与src/app.js的实现。
【免费下载链接】Cloud189Checkin天翼网盘自动签到项目地址: https://gitcode.com/gh_mirrors/clo/Cloud189Checkin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考