logging模块Python标准库的logging模块是日志管理的核心工具,支持多级别日志(DEBUG/INFO/WARNING/ERROR/CRITICAL)、多处理器(控制台/文件/网络)和灵活配置。
import logging
# 配置日志级别(DEBUG及以上)、格式和输出到文件
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='/var/log/myapp/app.log',
filemode='a' # 追加模式
)
logging.info('Application started') # 记录信息日志
logging.handlers中的RotatingFileHandler(按大小轮转)或TimedRotatingFileHandler(按时间轮转):from logging.handlers import RotatingFileHandler
# 按大小轮转:10MB一个文件,保留5个备份
rotating_handler = RotatingFileHandler(
'/var/log/myapp/app.log',
maxBytes=10*1024*1024,
backupCount=5
)
rotating_handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
rotating_handler.setFormatter(formatter)
logging.getLogger().addHandler(rotating_handler) # 添加到根记录器
loguru(简化操作)loguru以简洁API和开箱即用的特性著称,适合快速集成。
pip install loguru
from loguru import logger
logger.add('/var/log/myapp/app.log', rotation='10 MB', retention='30 days', compression='zip') # 自动轮转+压缩+保留30天
logger.info('User logged in successfully') # 无需手动配置处理器
将Python日志发送到系统日志服务(rsyslog),统一管理所有系统日志。
/etc/rsyslog.d/python_app.conf):local0.* /var/log/myapp/syslog.log # 将local0设施的日志写入指定文件
& stop # 停止进一步转发(避免重复记录)
local0设施:import logging
import logging.handlers
handler = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_LOCAL0)
formatter = logging.Formatter('myapp[%(process)d]: %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logging.getLogger('myapp').addHandler(handler)
logging.getLogger('myapp').warning('Disk space low') # 记录到syslog
sudo systemctl restart rsyslog
logrotate工具)即使使用RotatingFileHandler,也可通过系统级logrotate实现更健壮的轮转(如压缩、删除旧日志)。
/etc/logrotate.d/myapp):/var/log/myapp/*.log {
daily # 每天轮转
rotate 7 # 保留7个备份
compress # 压缩旧日志(gzip)
missingok # 文件不存在时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件并设置权限
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
systemctl restart myapp # 可选:重启应用以重新打开日志文件
endscript
}
logrotate -vf /etc/logrotate.d/myapp # 强制轮转并显示详细信息
对于大规模应用,可使用ELK Stack(Elasticsearch+Logstash+Kibana)实现日志的集中存储、搜索和可视化。
Filebeat(轻量级日志收集器)读取Python日志文件(/var/log/myapp/*.log)。Logstash解析日志(如提取时间戳、级别、消息),发送到Elasticsearch。Kibana创建仪表盘,分析日志趋势(如错误率、访问量)。Filebeat配置中添加Python日志路径:filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/myapp/*.log
Logstash中编写Grok过滤器解析日志格式。www-data或自定义用户)有权限写入日志目录:sudo mkdir -p /var/log/myapp
sudo chown -R myuser:mygroup /var/log/myapp
sudo chmod -R 755 /var/log/myapp
logging.Filter自定义过滤规则。通过以上方案,可实现Python在CentOS上的灵活日志记录、自动轮转、系统集成及高级分析,满足从开发到生产的全生命周期需求。