Ubuntu下Node.js日志级别设置方法
在Ubuntu系统中,Node.js应用程序的日志级别设置主要依赖所使用的日志库(如winston、morgan、bunyan等),常见方式包括代码硬编码、环境变量、配置文件及进程管理工具(如PM2),以下是具体实现方法:
1. 通过代码直接设置(最直接的方式)
根据项目使用的日志库,在初始化日志记录器时通过level属性指定日志级别。以下是主流日志库的示例:
Winston(推荐)
const winston = require('winston');
const logger = winston.createLogger({
level: 'info', // 设置默认日志级别(可选:'error'、'warn'、'info'、'debug'、'verbose'等)
format: winston.format.combine(
winston.format.timestamp(),
winston.format.printf(({ timestamp, level, message }) => `${timestamp} [${level}]: ${message}`)
),
transports: [
new winston.transports.Console(), // 输出到控制台
new winston.transports.File({ filename: 'error.log', level: 'error' }), // 仅记录error级别到文件
new winston.transports.File({ filename: 'combined.log' }) // 记录所有级别到文件
]
});
logger.debug('Debug message (不会记录,因级别为info)'); // 不会输出
logger.info('Info message (会记录)'); // 会输出
Morgan(HTTP请求日志)
const express = require('express');
const morgan = require('morgan');
const app = express();
// 设置日志级别(预定义格式:'tiny'、'common'、'combined'等)
app.use(morgan('combined')); // 输出详细请求日志(如::method :url :status :response-time ms - :res[content-length])
// 或自定义格式
app.use(morgan(':method :url :status - :response-time ms'));
Bunyan(结构化日志)
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'my-app',
level: 'debug', // 结构化日志级别
serializers: bunyan.stdSerializers // 标准化日志输出(如req/res对象)
});
logger.info({ user: 'admin' }, 'User logged in'); // 输出结构化日志
Pino(高性能日志)
const pino = require('pino');
const logger = pino({ level: 'info' }); // 高性能JSON日志
logger.debug('Debug message (不会记录)');
logger.info('Info message (会记录)');
注意:修改代码后需重启Node.js应用使配置生效。
2. 通过环境变量设置(灵活推荐)
通过环境变量动态配置日志级别,避免修改代码,适合生产环境(如Docker、CI/CD流程)。步骤如下:
临时设置(当前终端有效)
LOG_LEVEL=debug node app.js # 启动时直接指定环境变量
永久设置(.env文件)
- 安装
dotenv库(用于加载.env文件):npm install dotenv - 创建
.env文件(项目根目录):LOG_LEVEL=info - 在代码中加载环境变量:
require('dotenv').config(); // 加载.env文件 const winston = require('winston'); const logger = winston.createLogger({ level: process.env.LOG_LEVEL || 'info', // 优先读取环境变量,未设置则默认为info format: winston.format.json(), transports: [new winston.transports.Console()] });
注意:环境变量的优先级高于代码中的默认值,修改.env文件后无需重启应用(若使用nodemon等工具会自动重启)。
3. 通过配置文件设置(适合复杂项目)
使用配置文件(如JSON、YAML)管理日志级别,便于团队协作和环境切换(开发/测试/生产)。
使用config库(推荐)
- 安装
config库:npm install config - 创建配置文件(项目根目录/config/default.json):
{ "logging": { "level": "info", "transports": { "console": true, "file": false } } } - 在代码中读取配置:
const config = require('config'); const winston = require('winston'); const logger = winston.createLogger({ level: config.get('logging.level'), // 从配置文件读取日志级别 format: winston.format.json(), transports: [ config.get('logging.transports.console') && new winston.transports.Console(), config.get('logging.transports.file') && new winston.transports.File({ filename: 'app.log' }) ].filter(Boolean) // 过滤掉false值 });
自定义JSON配置文件
- 创建
config.json:{ "logLevel": "debug" } - 在代码中读取:
const fs = require('fs'); const config = JSON.parse(fs.readFileSync('config.json', 'utf8')); const winston = require('winston'); const logger = winston.createLogger({ level: config.logLevel, format: winston.format.simple(), transports: [new winston.transports.Console()] });
注意:修改配置文件后需重启应用(除非使用热重载工具)。
4. 使用PM2管理日志级别(生产环境推荐)
PM2是Node.js进程管理工具,可通过其配置文件动态设置日志级别,支持日志分割、轮转等功能。
步骤
- 安装PM2:
npm install -g pm2 - 创建PM2配置文件(项目根目录/ecosystem.config.js):
module.exports = { apps: [ { name: 'my-app', script: 'app.js', env: { NODE_ENV: 'development', LOG_LEVEL: 'debug' // 开发环境日志级别 }, env_production: { NODE_ENV: 'production', LOG_LEVEL: 'info' // 生产环境日志级别 }, log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志时间格式 out_file: '/var/log/my-app.log', // 标准输出日志路径 error_file: '/var/log/my-app-error.log' // 错误日志路径 } ] }; - 启动应用:
pm2 start ecosystem.config.js --env production # 切换到生产环境 - 动态修改日志级别(无需重启):
pm2 restart my-app --update-env # 重启并应用新环境变量
优势:PM2支持日志分割(按大小/时间)、日志清理、进程守护等功能,适合生产环境。
总结
- 开发环境:推荐使用环境变量(.env文件)或代码硬编码,方便调试。
- 生产环境:推荐使用PM2配置文件或环境变量,结合日志分割和守护功能。
- 复杂项目:推荐使用
config库管理配置文件,支持多环境切换。
根据项目需求选择合适的方式,确保日志级别设置清晰、可维护。
以上就是关于“Ubuntu Node.js日志级别设置方法”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm