在Debian系统中设置Node.js应用程序的日志级别通常涉及选择合适的日志库、配置日志库、设置环境变量以及使用日志轮转等步骤。以下是一个详细的指南:
选择日志库
首先,你需要在你的Node.js应用程序中选择一个日志库。流行的日志库包括 Winston、Pino、Bunyan 和 Morgan 等。
安装日志库
使用npm或yarn来安装你选择的日志库。例如,如果你选择Winston,可以运行以下命令:
npm install winston
配置日志库
在你的Node.js应用程序中,根据日志库的文档来配置它。以下是使用Winston进行配置的示例:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info', // 设置日志级别为info
format: winston.format.json(), // 使用JSON格式化日志
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }), // 错误日志单独记录到文件
new winston.transports.File({ filename: 'combined.log' }) // 所有级别的日志记录到文件
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({ format: winston.format.simple() })); // 非生产环境输出到控制台
}
设置环境变量
你可以使用环境变量来控制日志级别和日志文件的路径,这样可以在不同的环境中(如开发、测试和生产)灵活地配置日志。例如,使用Winston时:
NODE_ENV=production LOG_LEVEL=info LOG_FILE=/logs/combined.log node app.js
在代码中读取这些环境变量:
const express = require('express');
const winston = require('winston');
const app = express();
// 配置Winston
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: process.env.LOG_FILE || 'combined.log' })
]
});
app.get('/', (req, res) => {
logger.info('Request received at', new Date());
res.send('Hello World!');
});
app.listen(3000, () => {
logger.info('Server is running on port 3000');
});
使用日志轮转
为了避免日志文件过大,可以使用日志轮转工具(如 winston-daily-rotate-file
)来实现日志文件的自动轮换。首先安装该库:
npm install winston-daily-rotate-file
然后在你的日志配置中使用它:
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
});
const logger = createLogger({
level: 'info',
format: format.combine(format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), format.json()),
transports: [transport, new transports.Console()]
});
日志聚合和管理
对于大型分布式系统,可以考虑将日志输出到专用的日志服务器,使用集中式的日志管理工具(如ELK Stack)进行统一管理,这样可以减轻应用程序本身的I/O压力。
通过以上步骤,你可以在Debian系统上为你的Node.js应用程序配置日志记录,以便于问题追踪和性能监控。记得定期检查日志文件,并根据需要调整日志配置。