大家都是怎么实现生产环境下的Nodejs日志呢
大家都是怎么实现生产环境下的Nodejs日志呢
如题
想在生产环境下使用的话,最基本的分级,分时日志应该是必须的
我想实现每天新建一个以日期命名的文件夹,然后在该文件夹按照不同等级(info,error,…)分为不同的文件写入日志
有什么简单可行的方法么
3 回复
当然可以!在生产环境中管理日志是一个非常重要的任务。我们可以使用一些成熟的库来帮助我们实现这一点。以下是一个简单的示例,展示如何使用 winston
库来实现你所描述的日志管理需求。
安装依赖
首先,你需要安装 winston
和 winston-daily-rotate-file
这两个库:
npm install winston winston-daily-rotate-file
示例代码
接下来,你可以创建一个简单的日志配置文件,例如 logger.js
:
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, printf } = format;
// 自定义日志格式
const myFormat = printf(info => {
return `${info.timestamp} ${info.level}: ${info.message}`;
});
const logger = createLogger({
level: 'info',
format: combine(
timestamp(),
myFormat
),
transports: [
new transports.DailyRotateFile({
filename: 'logs/%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
json: false,
format: combine(
timestamp(),
myFormat
)
})
]
});
// 如果不是生产环境,则将日志输出到控制台
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console({
format: combine(
timestamp(),
myFormat
)
}));
}
module.exports = logger;
解释
- 自定义日志格式:我们定义了一个简单的日志格式,包含时间戳、日志级别和消息。
- DailyRotateFile:
winston-daily-rotate-file
提供了按日期轮转日志文件的功能。我们设置日志文件每天生成一个新的,并且归档为.zip
文件。 - 日志级别:我们设置了日志的最低级别为
info
,这意味着所有info
及以上级别的日志都会被记录。 - 多环境支持:如果当前环境不是生产环境(即
NODE_ENV
不等于'production'
),则将日志输出到控制台。
使用日志
在你的应用中引入并使用这个日志配置:
const logger = require('./logger');
logger.info('This is an info message.');
logger.error('This is an error message.');
这样,你就可以在生产环境中按日期和级别来管理日志文件了。希望这对你有帮助!
在生产环境中实现Node.js的日志记录,通常需要满足以下几个需求:分级日志、按时间分割日志文件、以及方便查看和管理。这里提供一种基于winston
库的方法来实现这些需求。
使用 winston
实现日志管理
winston
是一个强大的日志库,支持多种运输方式(transports),包括文件运输,非常适合生产环境下的日志管理。我们可以配置winston
来创建每日日志文件,并根据日志级别(如info, error等)存储在不同的文件中。
示例代码
首先安装winston
和它的日志文件运输器(file transport):
npm install winston winston-daily-rotate-file
然后创建一个日志配置文件:
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, printf } = format;
// 定义自定义日志格式
const myFormat = printf(info => {
return `${info.timestamp} ${info.level}: ${info.message}`;
});
const logger = createLogger({
format: combine(
timestamp(),
myFormat
),
transports: [
new transports.DailyRotateFile({
filename: 'logs/%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
level: 'info', // 控制信息级别的日志文件
}),
new transports.DailyRotateFile({
filename: 'logs/error-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
level: 'error', // 控制错误级别的日志文件
handleExceptions: true,
humanReadableUnhandledException: true,
})
],
});
// 输出到控制台
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console());
}
module.exports = logger;
解释
- 自定义日志格式:我们定义了一个简单的日志格式,包含时间戳、日志级别和消息内容。
- 每日轮转文件传输器:
DailyRotateFile
用于创建每日的轮转日志文件。你可以设置文件名模板(例如%DATE%.log
),日期模式(如YYYY-MM-DD
),最大文件大小(如20m
),以及文件保留天数(如14d
)。 - 控制台输出:如果应用运行在开发环境(非生产环境),我们添加一个控制台传输器以便于调试。
通过这种方式,我们可以轻松地管理生产环境中的日志记录,确保日志文件被合理组织并易于维护。