Ubuntu Node.js日志级别设置方法
导读:Ubuntu下Node.js日志级别设置方法 在Ubuntu系统中,Node.js应用程序的日志级别设置主要依赖所使用的日志库(如winston、morgan、bunyan等),常见方式包括代码硬编码、环境变量、配置文件及进程管理工具(如P...
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
库管理配置文件,支持多环境切换。
根据项目需求选择合适的方式,确保日志级别设置清晰、可维护。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Node.js日志级别设置方法
本文地址: https://pptw.com/jishu/729894.html