阅读量:2
Ubuntu 上 Node.js 日志格式自定义指南
一 核心思路
- 在 Ubuntu 上,Node.js 日志格式通常由应用代码或日志库决定,系统层面并不强制格式。常见做法是使用成熟的日志库(如 Winston、Morgan、Log4js)来定义包含时间戳、日志级别、消息、模块名等的输出格式,并按需输出到控制台与文件。对于 Express 应用,HTTP 请求日志建议使用 Morgan 单独定制。为便于排错与运维,还应设置合理的日志级别(如 error、warn、info、debug)。
二 使用 Winston 自定义应用日志
- 安装与最简配置
- 安装:
npm install winston - 示例:自定义时间戳格式与 printf 模板,分别输出到控制台与文件,并按级别分流到 error.log 与 combined.log。
- 要点:使用
winston.format.combine组合多个格式器;timestamp控制时间格式;printf定义最终输出模板;transports可同时配置多个输出目标。
- 安装:
- 参考代码
- const winston = require(‘winston’);
const logger = winston.createLogger({
level: ‘info’,
format: winston.format.combine(
winston.format.timestamp({ format: ‘YYYY-MM-DD HH:mm:ss’ }),
winston.format.printf(({ timestamp, level, message }) => {
return
[${timestamp}] [${level.toUpperCase()}] ${message}; }) ), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: ‘logs/error.log’, level: ‘error’ }), new winston.transports.File({ filename: ‘logs/combined.log’ }) ] }); logger.info(‘Hello, world!’); logger.error(‘An error occurred’);
- const winston = require(‘winston’);
const logger = winston.createLogger({
level: ‘info’,
format: winston.format.combine(
winston.format.timestamp({ format: ‘YYYY-MM-DD HH:mm:ss’ }),
winston.format.printf(({ timestamp, level, message }) => {
return
三 使用 Morgan 自定义 HTTP 请求日志(Express)
- 安装与最简配置
- 安装:
npm install morgan - 示例:自定义 token 组合 method、url、statusCode、ip、userAgent,开发环境输出到控制台,生产环境写入文件流。
- 要点:
morgan.token定义字段;通过stream指定写入目标;可按环境切换输出介质。
- 安装:
- 参考代码
- const express = require(‘express’);
const morgan = require(‘morgan’);
const fs = require(‘fs’);
const path = require(‘path’);
const app = express();
morgan.token(‘customFormat’, (req, res) => {
return
${req.method} ${req.url} ${res.statusCode} ${req.ip} - ${req.userAgent}; }); const accessLogStream = fs.createWriteStream( path.join(__dirname, ‘access.log’), { flags: ‘a’ } ); app.use(morgan(‘:customFormat’, { stream: accessLogStream })); app.get(‘/’, (req, res) => res.send(‘Hello, world!’)); app.listen(3000, () => console.log(‘Server on 3000’));
- const express = require(‘express’);
const morgan = require(‘morgan’);
const fs = require(‘fs’);
const path = require(‘path’);
const app = express();
morgan.token(‘customFormat’, (req, res) => {
return
四 进阶与运维建议
- 日志轮转:使用 logrotate 定期切分日志,避免单文件过大,便于定位时段问题。
- 集中化日志:将日志发送到 ELK Stack、Graylog、Fluentd 等平台,便于搜索、分析与可视化。
- 可读性增强:在控制台输出启用 颜色 与样式(如
winston.format.colorize()),提升本地调试效率。 - 系统日志集成:将 Node.js 应用作为 systemd 服务运行,通过
journalctl -u your-service-name -f查看结构化日志,统一运维入口。
以上就是关于“Ubuntu Node日志格式如何自定义”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm