在Ubuntu系统中统一规范JavaScript日志格式,可参考以下方案,主要以Node.js应用为例:
推荐使用 Winston 或 Pino 等库,支持自定义格式、多传输方式(文件、控制台等)及结构化日志输出。
基础格式要求
[2025-08-19 14:30:00] [ERROR] [auth-service] 用户登录失败:用户名或密码错误
。结构化日志(推荐)
以JSON格式输出,便于机器解析,例如:
{
"timestamp": "2025-08-19T14:30:00.000Z",
"level": "ERROR",
"service": "auth-service",
"message": "用户登录失败",
"details": {
"username": "test_user",
"error_code": 401
}
}
可通过Winston的format.json()
或Pino的默认JSON格式实现。
以Winston为例,创建统一配置文件(如logger.js
):
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.printf(({ timestamp, level, service, message, details }) => {
const base = `${timestamp} [${level.toUpperCase()}] [${service}] ${message}`;
return details ? `${base} | Details: ${JSON.stringify(details)}` : base;
})
),
transports: [
new transports.Console(),
new transports.File({ filename: 'logs/app.log' })
]
});
module.exports = logger;
使用时传入模块名等上下文:
const logger = require('./logger');
logger.error('用户登录失败', { service: 'auth-service', username: 'test_user' });
日志文件管理
logrotate
工具配置轮转策略。/etc/logrotate.d/js-logs
):/var/log/js-app/*.log {
daily
rotate 7
compress
missingok
notifempty
}
集中化日志管理
将日志发送至ELK Stack、Graylog等平台,便于统一检索和分析。例如通过Winston的winston-elasticsearch
传输至Elasticsearch。
format.mask
)自动脱敏。通过以上步骤,可在Ubuntu环境下实现JavaScript日志的格式统一与规范管理。