3.0 KiB
3.0 KiB
kind, name, category, scope, source_files
| kind | name | category | scope | source_files | |||||
|---|---|---|---|---|---|---|---|---|---|
| logging_system | 基于 Winston 的日志系统 | logging_system |
|
|
1. 使用的系统与框架
- 后端采用 Winston v3 作为统一日志框架,通过
backend/src/config/logger.js集中创建并导出单例 logger。 - 前端(Vue3)未发现专用日志库,未在前端代码中引入结构化日志输出。
- Sequelize 在开发环境将 SQL 查询直接
console.log到控制台,生产环境关闭 SQL 日志。
2. 核心文件与包
backend/src/config/logger.js— Winston 实例定义、格式与传输配置backend/src/app.js— 应用启动时记录数据库同步、服务监听等关键事件backend/package.json— 依赖声明winston: ^3.14backend/logs/app.log— 默认文件日志输出路径backend/src/config/database.js— Sequelize 的logging开关逻辑
3. 架构与约定
- 单例导出:
logger.js使用winston.createLogger()创建全局 logger,并通过module.exports = logger供各模块require('../config/logger')复用。 - 日志级别:全局默认 level 为
info;业务代码中使用logger.info / warn / error三个级别,未见debug调用。 - 输出格式:时间戳 + 级别 + 消息 + 可选 JSON meta 字段,形如:
2026-06-09 12:34:56 - info - User admin logged in {} - 双通道输出:同时写入 Console 和文件
backend/logs/app.log,编码 UTF-8。 - 无按级别/日期分片:当前仅一个
app.log文件,未启用FileTransport的maxsize、maxFiles、filename模板等滚动策略。 - Sequelize SQL 日志:仅在
isDevelopment时开启,输出到console.log,不经过 Winston。 - 中间件层:未集成 Express 请求日志中间件(如
morgan),HTTP 访问日志未统一采集。
4. 开发者应遵循的规则
- 统一入口:所有日志必须通过
const logger = require('../config/logger')获取,禁止直接使用console.log输出业务日志。 - 级别选择:
info:正常业务流程事件(登录成功、密码修改、数据操作完成等)warn:可恢复异常或潜在问题(登录失败、参数校验警告等)error:不可恢复错误(数据库异常、外部服务调用失败等)
- 结构化字段:通过第三个参数传入对象以附加上下文,例如
logger.warn({ username, ip }, 'Login failed'),该对象会被序列化为 JSON 追加到消息末尾。 - 敏感信息:避免在日志中记录明文密码、完整 token 等敏感内容。
- SQL 调试:如需查看底层 SQL,确保环境变量处于开发模式以使 Sequelize logging 生效;生产环境应保持关闭以避免性能损耗。
- 日志轮转:当前未配置自动轮转,部署时应配合外部工具(如
logrotate、Docker log driver)管理backend/logs/app.log大小。