Ubuntu下Node.js日志配置方法
导读:Ubuntu下Node.js日志配置方法 1. 使用内置console.log(基础调试) console.log是Node.js最简单的日志方式,适合开发阶段快速输出信息。可通过字符串模板添加时间戳等信息增强可读性: const expr...
Ubuntu下Node.js日志配置方法
1. 使用内置console.log(基础调试)
console.log是Node.js最简单的日志方式,适合开发阶段快速输出信息。可通过字符串模板添加时间戳等信息增强可读性:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) =>
{
console.log(`[${
new Date().toISOString()}
] INFO: Request received at ${
req.url}
`);
res.send('Hello World!');
}
);
app.listen(port, () =>
{
console.log(`[${
new Date().toISOString()}
] INFO: Server running at http://localhost:${
port}
/`);
}
);
缺点:无法灵活控制日志级别、格式或持久化存储,不适合生产环境。
2. 使用第三方日志库(推荐生产环境)
2.1 Winston(通用灵活)
Winston是Node.js最流行的日志库,支持多传输(控制台、文件、远程服务器等)、日志级别和格式化。
- 安装:
npm install winston - 配置示例(创建
logger.js):const { createLogger, format, transports } = require('winston'); const logger = createLogger({ level: process.env.LOG_LEVEL || 'info', // 通过环境变量设置日志级别 format: format.combine( format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' } ), // 添加时间戳 format.printf(({ timestamp, level, message } ) => `[${ timestamp} ] ${ level} : ${ message} `) // 自定义格式 ), transports: [ new transports.Console(), // 输出到控制台(开发环境友好) new transports.File({ filename: 'logs/error.log', level: 'error' } ), // 错误日志单独文件 new transports.File({ filename: 'logs/combined.log' } ) // 所有日志合并文件 ] } ); // 非生产环境添加控制台输出(带简单格式) if (process.env.NODE_ENV !== 'production') { logger.add(new transports.Console({ format: format.simple() } )); } module.exports = logger; - 使用示例:
const logger = require('./logger'); logger.info('Application started'); logger.error('Something went wrong!');
优点:功能全面,支持日志分级、格式化和多目标输出,适合复杂应用。
2.2 Morgan(HTTP请求日志中间件)
Morgan专门用于记录HTTP请求日志,适合Express/Koa等框架,可将请求信息输出到文件或控制台。
- 安装:
npm install morgan - 配置示例:
const express = require('express'); const morgan = require('morgan'); const fs = require('fs'); const path = require('path'); const app = express(); const port = 3000; // 创建写入流(输出到access.log文件) const accessLogStream = fs.createWriteStream(path.join(__dirname, 'logs/access.log'), { flags: 'a' } ); // 使用morgan中间件,格式为'combined'(Apache标准格式) app.use(morgan('combined', { stream: accessLogStream } )); app.get('/', (req, res) => { res.send('Hello World!'); } ); app.listen(port, () => { console.log(`Server running at http://localhost:${ port} /`); } );
优点:专注于HTTP请求日志,格式规范,便于分析请求流量和性能。
3. 日志轮转(防止日志过大)
当日志文件过大时,需通过轮转压缩旧日志,节省存储空间。常用winston-daily-rotate-file库实现每日轮转。
- 安装:
npm install winston-daily-rotate-file - 配置示例(修改
logger.js):const { createLogger, format, transports } = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const logger = createLogger({ level: 'info', format: format.combine( format.timestamp(), format.json() ), transports: [ new DailyRotateFile({ // 每日轮转 filename: 'logs/application-%DATE%.log', datePattern: 'YYYY-MM-DD', zippedArchive: true, // 压缩旧日志 maxSize: '20m', // 单个日志文件最大20MB maxFiles: '14d' // 保留14天日志 } ), new transports.Console() ] } ); module.exports = logger;
优点:自动化管理日志文件,避免磁盘空间耗尽。
4. 使用PM2管理日志(进程与日志分离)
PM2是Node.js进程管理工具,可自动重启应用并提供日志管理功能,适合生产环境部署。
- 安装PM2:
npm install pm2 -g - 启动应用并管理日志:
# 启动应用(名称为my-app) pm2 start app.js --name my-app # 查看实时日志 pm2 logs my-app # 查看特定日志文件 pm2 logs my-app --lines 100 # 查看最近100行 # 配置日志轮转(限制文件大小和保留数量) pm2 set pm2-logrotate:max_size 10M # 单个文件最大10MB pm2 set pm2-logrotate:retain 7 # 保留7天日志
优点:无需手动管理进程和日志,支持日志分割、压缩和远程存储,提升应用稳定性。
5. 通过环境变量配置日志级别
通过环境变量动态调整日志级别,适应不同环境(开发/测试/生产)的需求。
- 设置环境变量:
# 开发环境(显示debug日志) LOG_LEVEL=debug node app.js # 生产环境(仅显示error和info日志) LOG_LEVEL=info node app.js - 代码中使用(Winston示例):
const logger = createLogger({ level: process.env.LOG_LEVEL || 'info', // 默认info级别 // ...其他配置 } );
优点:无需修改代码即可调整日志输出,提升灵活性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下Node.js日志配置方法
本文地址: https://pptw.com/jishu/739540.html
