针对CentOS系统中JavaScript(如Node.js应用)日志过大的问题,可通过日志轮转、日志级别调整、远程存储、定期清理等多种方式综合管理,以下是具体操作步骤:
logrotate是CentOS系统自带的日志管理工具,可自动分割、压缩、删除旧日志,防止单个日志文件过大。
sudo yum install logrotate -y
/etc/logrotate.d/my_js_app),添加以下规则:/var/log/my_js_app/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 若日志文件不存在也不报错
notifempty # 若日志为空则不轮转
create 640 root adm # 创建新日志文件并设置权限
}
sudo logrotate -f /etc/logrotate.d/my_js_app
此配置会将/var/log/my_js_app/目录下的日志文件按天分割,保留7天,并压缩旧日志。通过降低日志级别,减少不必要的日志输出(如将debug改为info或warn)。
const winston = require('winston');
const logger = winston.createLogger({
level: 'info', // 设置日志级别(info及以上才会记录)
transports: [
new winston.transports.File({ filename: '/var/log/my_js_app/app.log' })
]
});
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'my_js_app',
level: 'warn', // 设置日志级别
streams: [{
path: '/var/log/my_js_app/app.log'
}]
});
合理设置日志级别可显著减少日志量(如error级别仅记录错误信息,debug级别会记录详细调试信息)。将JS日志发送到远程日志服务器(如ELK Stack、Graylog),避免本地磁盘空间占用。
input插件(如file插件)收集JS日志文件:input {
file {
path => "/var/log/my_js_app/*.log"
start_position => "beginning"
}
}
output插件发送日志到Elasticsearch:output {
elasticsearch {
hosts => ["localhost:9200"]
index => "my_js_app_logs-%{+YYYY.MM.dd}"
}
}
通过cron定时任务定期删除过期日志,释放磁盘空间。
/usr/local/bin/clean_js_logs.sh):#!/bin/bash
LOG_DIR="/var/log/my_js_app"
MAX_DAYS=30 # 保留30天内的日志
find "$LOG_DIR" -type f -name "*.log" -mtime +$MAX_DAYS -exec rm -f {} \;
sudo chmod +x /usr/local/bin/clean_js_logs.sh
crontab -e
添加以下内容:0 2 * * * /usr/local/bin/clean_js_logs.sh
此脚本会删除/var/log/my_js_app/目录下超过30天的.log文件。若JS应用使用systemd服务(如node app.js通过systemctl start my_js_app启动),可通过systemd-journald限制日志大小。
/etc/systemd/journald.conf):[Journal]
SystemMaxUse=500M # 日志最大占用500MB
MaxFileSec=1week # 单个日志文件保留1周
Compress=yes # 压缩旧日志
sudo systemctl restart systemd-journald
此配置可限制系统日志(包括JS应用日志)的存储空间。通过以上方法,可有效解决CentOS系统中JS日志过大的问题,确保系统稳定运行。