Node.js 在 Ubuntu 的日志输出方式
一 内置方式与简单场景
二 使用日志库结构化输出
const winston = require(‘winston’); const express = require(‘express’); const morgan = require(‘morgan’); const fs = require(‘fs’); const path = require(‘path’);
const logger = winston.createLogger({ level: process.env.LOG_LEVEL || ‘info’, format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.File({ filename: ‘logs/error.log’, level: ‘error’ }), new winston.transports.File({ filename: ‘logs/combined.log’ }) ] }); if (process.env.NODE_ENV !== ‘production’) { logger.add(new winston.transports.Console({ format: winston.format.simple() })); }
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) => { logger.info(‘Hello World’); res.send(‘Hello World’); });
app.listen(3000, () => logger.info(‘Server listening on 3000’));
三 使用进程管理器与 systemd 管理日志
四 日志轮转与运维要点