Node.js日志如何存档

作者:袖梨 2026-07-18

在Node.js中,可以使用第三方库或者自带的模块来实现日志归档。以下是两种常见的方法:

Node.js日志如何归档

方法一:使用winston

winston是一个流行的Node.js日志库,可以轻松地实现日志归档。首先,需要安装winston

npm install winston

接下来,创建一个logger.js文件,并设置日志归档:

const winston = require('winston');const { combine, timestamp, printf } = winston.format;// 自定义日志格式const myFormat = printf(({ level, message, timestamp }) => {return `${timestamp} ${level.toUpperCase()}: ${message}`;});// 创建一个logger实例const logger = winston.createLogger({level: 'info',format: combine(timestamp(), myFormat),transports: [new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),new winston.transports.File({ filename: 'logs/combined.log' }),],});// 日志归档const archive = new winston.transports.DailyRotateFile({filename: 'logs/logs-%DATE%.log',datePattern: 'YYYY-MM-DD',zippedArchive: true,maxSize: '20m',maxFiles: '14d',});logger.add(archive);module.exports = logger;

在需要记录日志的地方,引入logger.js

const logger = require('./logger');logger.info('Hello, world!');

方法二:使用Node.js内置的fs模块

如果不想使用第三方库,可以使用Node.js内置的fs模块来实现日志归档。以下是一个简单的示例:

const fs = require('fs');const path = require('path');const os = require('os');const moment = require('moment');const logDir = path.join(__dirname, 'logs');const archiveDir = path.join(logDir, 'archive');if (!fs.existsSync(logDir)) {fs.mkdirSync(logDir);}if (!fs.existsSync(archiveDir)) {fs.mkdirSync(archiveDir);}const logFile = path.join(logDir, 'app.log');const archiveLogFile = path.join(archiveDir, `app-${moment().format('YYYY-MM-DD')}.log`);function logToFile(message) {const timestamp = moment().format('YYYY-MM-DD HH:mm:ss');const logEntry = `${timestamp}: ${message}n`;fs.appendFile(logFile, logEntry, (err) => {if (err) console.error('Error writing to log file:', err);});// 每天归档日志文件if (moment().format('YYYY-MM-DD') !== moment().subtract(1, 'days').format('YYYY-MM-DD')) {fs.rename(logFile, archiveLogFile, (err) => {if (err) console.error('Error archiving log file:', err);});}}logToFile('Hello, world!');

在这个示例中,我们使用fs.appendFile()将日志写入文件,并使用fs.rename()将旧日志文件移动到归档目录。这个简单的实现可以根据需要进行扩展和优化。

相关文章

精彩推荐