本文目录导读:

- Linux 系统 - logrotate(最常用)
- Python 应用 - logging.handlers
- Java (Logback) - logback.xml
- Node.js (winston)
- Docker 容器日志配置
- Shell 脚本自定义实现
- 建议的最佳实践
Linux 系统 - logrotate(最常用)
配置文件位置
- 主配置:
/etc/logrotate.conf - 自定义配置:
/etc/logrotate.d/目录下
示例配置
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
# 每天轮转
daily
# 保留7天的日志
rotate 7
# 日志文件最大100M
size 100M
# 如果日志为空,不轮转
notifempty
# 缺失日志文件不报错
missingok
# 压缩旧日志
compress
# 延迟压缩
delaycompress
# 轮转后执行脚本
postrotate
systemctl reload myapp 2>/dev/null || true
endscript
}
手动测试运行
# 测试配置是否正确 logrotate -d /etc/logrotate.d/myapp # 强制执行 logrotate -f /etc/logrotate.d/myapp # 查看状态 cat /var/lib/logrotate/status
Python 应用 - logging.handlers
import logging
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
# 按文件大小切分
handler = RotatingFileHandler(
'app.log', # 日志文件
maxBytes=10*1024*1024, # 10MB
backupCount=5 # 保留5个备份
)
# 按时间切分
handler = TimedRotatingFileHandler(
'app.log',
when='midnight', # 每天午夜轮转
interval=1,
backupCount=30
)
# 配置日志器
logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
Java (Logback) - logback.xml
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<!-- 按时间轮转 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 按文件大小轮转 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
</configuration>
Node.js (winston)
const winston = require('winston');
require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new winston.transports.DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m', // 最大20MB
maxFiles: '14d', // 保留14天
zippedArchive: true // 压缩归档
})
]
});
Docker 容器日志配置
# docker-compose.yml
version: '3.8'
services:
myapp:
image: myapp:latest
logging:
driver: "json-file"
options:
max-size: "10m" # 每个日志文件最大10MB
max-file: "5" # 最多保留5个文件
compress: "true" # 压缩归档
Shell 脚本自定义实现
#!/bin/bash
LOG_FILE="/var/log/myapp/app.log"
LOG_DIR="/var/log/myapp"
MAX_SIZE=10485760 # 10MB in bytes
RETENTION_DAYS=7
rotate_log() {
local current_size=$(stat -f%z "$LOG_FILE" 2>/dev/null || echo 0)
if [ $current_size -gt $MAX_SIZE ]; then
local timestamp=$(date +%Y%m%d_%H%M%S)
mv "$LOG_FILE" "${LOG_FILE}_${timestamp}"
gzip "${LOG_FILE}_${timestamp}"
touch "$LOG_FILE"
# 清理过期日志
find "$LOG_DIR" -name "*.gz" -mtime +$RETENTION_DAYS -delete
fi
}
# 设置cron定时任务(每1小时检查一次)
# crontab -e 添加: 0 * * * * /path/to/rotate.sh
建议的最佳实践
配置策略建议
- Web应用日志:每天轮转,保留30天
- 数据库日志:根据大小(如500M)轮转,保留7个
- 系统日志:每周轮转,保留4周
- 调试日志:按需配置,及时清理
关键注意点
- 日志量评估:根据日志生成速度调整策略
- 磁盘空间:设置合理的保留周期和压缩
- 性能影响:避免频繁轮转影响业务
- 监控告警:设置磁盘空间使用率告警
实用命令
# 查看日志文件大小 du -sh /var/log/*.log # 查看日志保留时间 stat /var/log/*.log # 手动触发logrotate logrotate -f /etc/logrotate.d/app
选择合适的日志切割策略需要根据你的具体场景(日志量、磁盘空间、保留需求等)来定制,起点建议使用 logrotate,它是 Linux 系统中最成熟、最简单的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播