您的位置:首页 >如何配置Ubuntu JS日志记录策略
发布于2026-05-02 阅读(0)
扫一扫,手机访问

日志管理,听起来像是运维的活儿,但对于一个健壮的Node.js应用来说,它绝对是开发阶段就必须规划好的核心环节。一套清晰的日志策略,能让你在问题发生时,快速定位根因,而不是在茫茫控制台输出里大海捞针。下面,我们就来聊聊在Ubuntu环境下,如何为你的Node.js应用搭建一套既专业又实用的日志体系。
在动手写代码之前,先明确几个关键策略,这能帮你少走很多弯路。
理论说完了,来看看具体怎么实现。这里提供几个最常见的配置示例。
npm i winston winston-daily-rotate-file。const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = createLogger({
level: process.env.LOG_LEVEL || 'info',
format: format.combine(
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
format.json()
),
defaultMeta: { service: 'my-app' },
transports: [
new DailyRotateFile({
filename: '/var/log/myapp/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
}),
new transports.Console({ format: format.simple() })
]
});
// 使用示例
logger.info('服务启动', { port: 3000 });
logger.error('数据库不可用', { err: err.message });
这个配置实现了按日期和大小轮转,自动压缩旧日志,并保留14天。
npm i morgan。const express = require('express');
const morgan = require('morgan');
const fs = require('fs');
const path = require('path');
const app = express();
const accessLogStream = fs.createWriteStream(
path.join(__dirname, 'logs', 'access.log'),
{ flags: 'a' }
);
app.use(morgan('combined', { stream: accessLogStream }));
app.get('/', (req, res) => res.send('Hello World'));
app.listen(3000);
LOG_LEVEL=debug node app.js。level: process.env.LOG_LEVEL || ‘info’。应用写好了,怎么运行它,也决定了日志的去向和管理方式。
npm i -g pm2。pm2 start app.js --name my-app 启动服务。
pm2 logs my-app 可以实时查看、追踪日志,并且支持按服务名过滤,管理多应用时特别方便。/etc/systemd/system/myapp.service:
[Unit]
Description=My Node.js App
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/app.js
Restart=always
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
journalctl -u myapp.service -f 来跟随查看系统日志中你的应用输出了,所有日志由systemd统一管理。即使应用内配置了轮转,结合系统工具再做一层保障,是生产环境的常见做法。
/etc/logrotate.d/ 下为你的应用创建一个配置文件,比如 nodejs-app:
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 www-data adm
copytruncate
}
daily 表示每天轮转;rotate 7 保留7份旧日志;compress 用gzip压缩;create 设置新日志文件的权限和属主;copytruncate 这个参数很重要,它先复制文件再清空原文件,适用于那些不支持接收信号重新打开日志句柄的应用。sudo logrotate -f /etc/logrotate.d/nodejs-app。#!/usr/bin/env bash
LOG_DIR="/var/log/myapp"
find "$LOG_DIR" -type f -name "*.gz" -mtime +7 -delete
.timer 单元和对应的 .service 单元,设置 OnCalendar=daily 并启用,就能实现每日自动清理了。最后,让我们把视角拔高,看看如何让日志产生更大的价值。
pm2 logs 命令会自动聚合所有实例的日志输出,并支持高亮和过滤,对于快速故障排查非常高效。说到底,日志不是记下来就完了。从规范记录,到妥善存储,再到集中分析和监控告警,形成一个完整的闭环,这才是现代应用日志管理的正确姿势。希望这份指南能帮助你,在Ubuntu上为Node.js应用构建起坚实的可观测性基础。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9