117.info
人生若只如初见

Node.js日志轮转与压缩方法

在Node.js应用程序中,日志轮转和压缩是重要的维护任务,有助于管理日志文件的大小和数量,同时节省存储空间。以下是一些常用的方法和工具来实现日志轮转与压缩:

1. 使用 winstonwinston-daily-rotate-file

winston 是一个流行的日志库,结合 winston-daily-rotate-file 可以实现日志的每日轮转。

安装依赖

npm install winston winston-daily-rotate-file

配置示例

const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  filename: 'application-%DATE%.log',
  datePattern: 'YYYY-MM-DD-HH',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
});

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    transport
  ]
});

logger.info('Hello, world!');

2. 使用 pinopino-rotate

pino 是一个高性能的日志库,结合 pino-rotate 可以实现日志的轮转。

安装依赖

npm install pino pino-rotate

配置示例

const pino = require('pino');
const rotate = require('pino-rotate');

const logger = pino({
  level: 'info'
});

rotate({
  period: '1d', // 每天轮转一次
  path: 'logs/', // 日志文件存放路径
  maxsize: '20m', // 单个日志文件最大大小
  compress: true // 是否压缩旧日志文件
});

logger.info('Hello, world!');

3. 使用 morganmorgan-body

morgan 是一个HTTP请求日志中间件,结合 morgan-body 可以记录请求体日志,并使用其他工具进行轮转和压缩。

安装依赖

npm install morgan morgan-body

配置示例

const express = require('express');
const morgan = require('morgan');
const morganBody = require('morgan-body');
const fs = require('fs');
const path = require('path');
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const app = express();

// 创建日志目录
const logDir = path.join(__dirname, 'logs');
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir);
}

// 配置winston日志
const transport = new DailyRotateFile({
  filename: path.join(logDir, 'access-%DATE%.log'),
  datePattern: 'YYYY-MM-DD-HH',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
});

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp(),
    format.json()
  ),
  transports: [
    transport
  ]
});

// 使用morgan记录访问日志
app.use(morgan('combined', { stream: { write: message => logger.info(message.trim()) } }));

// 使用morgan-body记录请求体日志
app.use(morganBody());

app.get('/', (req, res) => {
  res.send('Hello, world!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

总结

以上方法展示了如何在Node.js应用程序中实现日志轮转和压缩。选择合适的日志库和工具,根据具体需求进行配置,可以有效地管理日志文件,确保应用程序的稳定运行。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fec6fAzsNAgVVBFA.html

推荐文章

  • 如何优化Linux Overlay的读写速度

    要优化Linux Overlay的读写速度,可以采取以下几种方法:
    精简层级
    尽量减少OverlayFS的层数,因为每增加一层都会影响性能。你可以通过合并相邻的层或...

  • 怎样让Linux hostname生效

    在Linux系统中,更改主机名后,需要执行一些步骤以使更改生效。以下是在不同Linux发行版中使主机名生效的方法:
    对于基于Systemd的系统(如Ubuntu 16.04及更...

  • GitLab在Linux上的扩展功能有哪些

    GitLab在Linux上的扩展功能主要包括以下几个方面: CI/CD集成:GitLab内置了持续集成和持续交付功能,可以通过编写.gitlab-ci.yml文件来定义自动化构建、测试和部...

  • Linux下Compton的优势

    Compton是一个在Linux下广泛使用的窗口管理器合成器,主要用于提高图形性能、降低CPU占用率和改善系统界面效果。以下是Compton在Linux下的主要优势: 性能优化:...

  • Linux Oracle配置文件解读

    在Linux系统上配置Oracle数据库时,了解一些关键配置文件的作用和参数非常重要。以下是一些主要的配置文件及其解读:
    1. init.ora 或 spfile 用途:这些是O...

  • DHCP服务器IP地址如何分配

    DHCP(动态主机配置协议)服务器用于自动为网络中的设备分配IP地址。以下是DHCP服务器IP地址分配的基本步骤和考虑因素:
    1. 规划IP地址池 确定可用IP范围:...

  • CentOS HDFS配置有哪些常见错误

    在CentOS上配置Hadoop分布式文件系统(HDFS)时,可能会遇到一些常见的错误。以下是一些常见问题及其解决方法: 配置文件错误: 错误描述:配置文件中的参数设置...

  • 如何判断Debian消息的重要性

    要判断Debian消息的重要性,可以参考以下几个方面: 消息来源:检查消息是否来自Debian官方渠道,如邮件列表、官方网站、安全公告等。官方渠道发布的信息通常更可...