Ubuntu下设置JavaScript(Node.js)日志级别的常见方法
在Ubuntu系统中,JavaScript应用程序(尤其是Node.js)的日志级别设置主要依赖第三方日志库(如winston、morgan、log4js等),以下是具体实现方式:
Winston是Node.js最流行的日志库之一,支持多传输(控制台、文件等)和灵活的日志级别配置。
步骤:
npm install 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信息(不会显示,因级别为info)');
logger.info('Info信息(会显示)');
logger.error('Error信息(会显示)');
说明:level
参数决定了日志的最低输出级别,高于该级别的日志会被记录(如level: 'info'
会记录info、warn、error级别的日志)。Morgan是Express.js的HTTP请求日志中间件,常用于记录请求详情。
步骤:
npm install morgan
const express = require('express');
const morgan = require('morgan');
const app = express();
// 常用预设级别:'combined'(详细)、'common'(简洁)、'dev'(开发环境,彩色输出)、'tiny'(最小化)
app.use(morgan('dev')); // 设置日志级别为dev
// 自定义日志格式(可选)
app.use(morgan(':method :url :status :response-time ms - :res[content-length]'));
app.get('/', (req, res) => res.send('Hello World'));
app.listen(3000, () => console.log('Server running on port 3000'));
说明:Morgan通过预设字符串控制日志级别,dev
级别会显示请求方法、URL、状态码、响应时间等详细信息,tiny
仅显示基本请求信息。Log4js是类似Java Log4j的Node.js日志库,支持配置文件和多appender(输出目标)。
步骤:
npm install log4js
log4js-config.json
:{
"appenders": {
"console": { "type": "console" },
"file": { "type": "file", "filename": "app.log" },
"errorFile": { "type": "file", "filename": "error.log" }
},
"categories": {
"default": { "appenders": ["console", "file"], "level": "info" }, // 默认级别为info
"error": { "appenders": ["errorFile"], "level": "error" } // error类别仅记录error级别
}
}
const log4js = require('log4js');
log4js.configure('./log4js-config.json');
const logger = log4js.getLogger(); // 获取默认logger(级别为info)
const errorLogger = log4js.getLogger('error'); // 获取error类别logger(级别为error)
logger.info('Info信息(会输出到console和file)');
errorLogger.error('Error信息(会输出到errorFile)');
说明:通过categories
配置不同类别的日志级别,default
为全局默认级别,可针对特定模块(如error
)设置更严格的级别。为了灵活调整日志级别(如开发环境用debug
,生产环境用info
),可通过环境变量控制。
步骤:
.env
文件):npm install dotenv
.env
文件:LOG_LEVEL=debug
require('dotenv').config();
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info', // 优先使用环境变量,未设置则默认为info
format: winston.format.json(),
transports: [new winston.transports.Console()]
});
logger.debug('Debug信息(仅在LOG_LEVEL=debug时显示)');
说明:通过process.env.LOG_LEVEL
读取环境变量,适合需要频繁切换日志级别的场景(如Docker部署时通过-e LOG_LEVEL=debug
传递参数)。error
> warn
> info
> debug
> verbose
(不同库可能略有差异)。info
或warn
,避免过多调试信息影响性能;开发环境可设置为debug
以获取详细信息。logrotate
)可自动管理日志文件大小和保留时间,防止磁盘空间耗尽。