优化新增耳机流程,优化界面
This commit is contained in:
@@ -3,7 +3,7 @@ schema_version: 1
|
||||
locale: zh-CN
|
||||
branch: main
|
||||
nodes_managed: true
|
||||
exported_at: "2026-07-17T02:01:49Z"
|
||||
exported_at: "2026-07-17T09:47:48Z"
|
||||
modules:
|
||||
"":
|
||||
dir_name: Audio Dashboard 全栈项目根(前后端 + 部署编排)
|
||||
@@ -13,3 +13,12 @@ modules:
|
||||
children: []
|
||||
depends_on: []
|
||||
related_to: []
|
||||
writings:
|
||||
dir_name: Luxsin CMS 软著操作手册生成
|
||||
title: Luxsin CMS 软著操作手册生成
|
||||
scope:
|
||||
- writings/
|
||||
source_files: []
|
||||
children: []
|
||||
depends_on: []
|
||||
related_to: []
|
||||
|
||||
@@ -8,32 +8,38 @@ source_files:
|
||||
- backend/src/config/logger.js
|
||||
- backend/src/app.js
|
||||
- backend/src/routes/auth.js
|
||||
- backend/src/config/database.js
|
||||
- backend/src/config/redis.js
|
||||
- backend/package.json
|
||||
---
|
||||
|
||||
## 1. 使用的系统与框架
|
||||
- 后端采用 **Winston v3** 作为统一日志框架,通过 `backend/src/config/logger.js` 集中创建并导出实例。
|
||||
- 前端未引入独立日志库,调试依赖浏览器控制台,无结构化前端日志方案。
|
||||
## 1. 使用的框架与工具
|
||||
- 日志框架:`winston ^3.14`
|
||||
- 依赖声明位于 `backend/package.json`,通过 `require('winston')` 引入。
|
||||
- 前端未集成专用日志库,调试主要依赖浏览器控制台。
|
||||
|
||||
## 2. 核心文件与位置
|
||||
- 日志配置与实例:`backend/src/config/logger.js`
|
||||
- 应用入口挂载:`backend/src/app.js`(`require('./config/logger')` 后在启动/错误路径调用)
|
||||
- 各路由模块按需 `require('../config/logger')` 使用(如 `routes/auth.js`、`routes/blacklist.js` 等)
|
||||
- 数据库 SQL 日志由 Sequelize 单独控制:`backend/src/config/database.js` 中 `logging: isDevelopment ? console.log : false`
|
||||
- 日志持久化目录:`backend/logs/app.log`(由 Dockerfile 中的 `/app/logs` 映射到宿主机)
|
||||
- 日志配置与实例导出:`backend/src/config/logger.js`
|
||||
- 应用入口统一引入:`backend/src/app.js`(`const logger = require('./config/logger');`)
|
||||
- 各模块按需引入使用,典型示例:`backend/src/routes/auth.js`、`backend/src/config/redis.js` 等。
|
||||
- 默认日志文件路径:`backend/logs/app.log`(由 `logger.js` 自动创建目录并写入)。
|
||||
|
||||
## 3. 架构与约定
|
||||
- **单例模式**:全局唯一 logger 实例,所有模块共享同一配置,避免重复初始化。
|
||||
- **输出目标**:同时写入 Console 与本地文件 `logs/app.log`,编码 UTF-8;未启用按天/大小轮转。
|
||||
- **日志级别**:默认 `info`,业务代码中使用 `logger.info / warn / error` 三种级别,未见 `debug` 使用。
|
||||
- **格式规范**:时间戳 `YYYY-MM-DD HH:mm:ss` + 级别 + 消息体;额外字段以 JSON 字符串拼接在末尾(`...meta` 展开为 `JSON.stringify(meta)`),非结构化 JSON 行。
|
||||
- **环境变量**:日志级别未暴露为环境变量,硬编码为 `'info'`。
|
||||
- **Sequelize SQL 日志**:开发环境通过 `console.log` 输出,生产关闭,不进入 Winston。
|
||||
- **集中式初始化**:所有日志输出均通过 `src/config/logger.js` 暴露的单一 `logger` 实例,避免重复配置。
|
||||
- **输出目标(transports)**:同时输出到控制台和文件两个 sink:
|
||||
- Console transport:便于本地开发实时观察。
|
||||
- File transport:固定文件名 `logs/app.log`,编码 UTF-8。
|
||||
- **格式策略**:`timestamp + level + message + JSON meta` 拼接的单行文本格式,时间格式为 `YYYY-MM-DD HH:mm:ss`;当存在额外元数据时以空格分隔追加 JSON 字符串。
|
||||
- **级别策略**:全局 `level: 'info'`,代码中仅使用 `info / warn / error` 三个级别,未见 `debug` 级别调用。
|
||||
- **结构化字段**:未采用 winston 的 structured log 对象传参方式,而是将业务上下文拼入 message 字符串(如 `Login failed for username=${trimmedUsername}`),meta 字段基本未使用。
|
||||
- **数据库层日志**:Sequelize 在开发环境启用原生 `console.log` 打印 SQL,生产环境关闭(`logging: isDevelopment ? (msg) => console.log(msg) : false`),不走 Winston。
|
||||
|
||||
## 4. 开发者应遵循的规则
|
||||
- 统一从 `../config/logger` 导入并使用,禁止直接 `console.log` 输出业务日志。
|
||||
- 关键事件使用对应级别:成功/常规信息用 `info`,可恢复异常或降级用 `warn`,不可恢复错误用 `error`。
|
||||
- 如需附加上下文,通过第三个参数对象传入(会被序列化为 JSON 拼接到消息后),例如 `logger.info('msg', { userId })`。
|
||||
- 不要在日志中记录敏感信息(密码、token、完整请求体等)。
|
||||
- 当前未实现日志轮转,生产部署时应配合外部 logrotate 或容器日志收集策略。
|
||||
- **统一引用**:始终从 `../config/logger` 或相对路径引用同一 logger 实例,不要自行 `createLogger`。
|
||||
- **级别选择**:
|
||||
- `info`:记录关键业务流程事件(登录成功、密码修改、服务启动等)。
|
||||
- `warn`:记录可恢复异常或预期外的分支(用户名不存在、资源未找到等)。
|
||||
- `error`:记录异常堆栈信息或不可恢复错误。
|
||||
- 不使用 `debug` 级别。
|
||||
- **消息内容**:将关键上下文(用户名、ID、MAC 等)直接拼入 message 字符串;如需附带复杂对象,可通过第三个参数传入 meta,但当前代码风格倾向于纯文本。
|
||||
- **敏感信息**:禁止在日志中输出密码、token、完整请求体等敏感数据(现有代码已避免输出 password_hash/token 值)。
|
||||
- **文件轮转**:当前未配置 winston-daily-rotate-file 等轮转插件,长期运行需注意 `app.log` 体积增长,后续可在 transports 中补充轮转策略。
|
||||
Reference in New Issue
Block a user