centos

nodejs日志在centos上的存储策略

小樊
39
2025-02-18 22:22:03
栏目: 云计算

在CentOS上配置Node.js应用程序的日志存储策略,可以遵循以下几个步骤:

1. 选择日志库

首先,选择一个适合Node.js的日志库。常用的日志库包括:

这些库提供了丰富的日志记录功能,包括日志级别、日志格式化、日志轮转等。

2. 配置日志库

winston为例,配置日志存储策略:

const winston = require('winston');
const { createLogger, format, transports } = winston;

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    format.printf(({ timestamp, level, message }) => {
      return `${timestamp} ${level}: ${message}`;
    })
  ),
  transports: [
    new transports.File({ filename: 'logs/error.log', level: 'error' }),
    new transports.File({ filename: 'logs/combined.log' })
  ]
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(new transports.Console({
    format: format.simple()
  }));
}

3. 日志轮转

为了防止日志文件过大,可以使用winston-daily-rotate-file库来实现日志轮转:

const { createLogger, format, transports } = winston;
const DailyRotateFile = require('winston-daily-rotate-file');

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

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    format.printf(({ timestamp, level, message }) => {
      return `${timestamp} ${level}: ${message}`;
    })
  ),
  transports: [
    transport,
    new transports.Console({
      format: format.simple()
    })
  ]
});

4. 监控和清理日志

定期监控日志文件的大小和数量,并设置自动清理策略。可以使用cron任务来定期清理旧日志文件:

# 每天凌晨2点清理7天前的日志文件
0 2 * * * find /path/to/logs -type f -name "*.log" -mtime +7 -exec rm -f {} \;

5. 使用系统日志服务

如果需要将日志发送到系统日志服务(如syslog),可以使用winston-syslog库:

const { createLogger, format, transports } = winston;
const Syslog = require('winston-syslog');

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    format.printf(({ timestamp, level, message }) => {
      return `${timestamp} ${level}: ${message}`;
    })
  ),
  transports: [
    new Syslog({
      host: 'localhost',
      port: 514,
      protocol: 'udp4'
    }),
    new transports.Console({
      format: format.simple()
    })
  ]
});

6. 配置Nginx或Apache反向代理

如果Node.js应用程序通过Nginx或Apache反向代理,可以配置这些服务器来处理日志文件,以便更好地管理和监控日志。

Nginx配置示例:

http {
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

  access_log /var/log/nginx/access.log main;
  error_log /var/log/nginx/error.log;

  server {
    listen 80;
    server_name example.com;

    location / {
      proxy_pass http://localhost:3000;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }
}

通过以上步骤,你可以在CentOS上配置Node.js应用程序的日志存储策略,确保日志文件得到有效管理和监控。

0
看了该问题的人还看了