以下是CentOS下Python日志管理的实用技巧:
基础日志配置
使用Python标准库logging
模块,通过basicConfig
快速设置日志级别、格式和输出目标(如文件、控制台),示例:
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='app.log', filemode='a')
logging.info('程序启动') # 记录信息
日志轮转管理
RotatingFileHandler
(按文件大小轮转)或TimedRotatingFileHandler
(按时间轮转),示例:from logging.handlers import TimedRotatingFileHandler
handler = TimedRotatingFileHandler('app.log', when='midnight', interval=1, backupCount=7) # 每天轮转,保留7天
handler.setFormatter(logging.Formatter('%(asctime)s - %(message)s'))
logging.getLogger().addHandler(handler)
logrotate
工具配置日志切割(如/etc/logrotate.d/myapp
),支持按大小、天数轮转并压缩旧日志。日志输出与过滤
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('app.log')
logging.getLogger().addHandler(console_handler)
logging.getLogger().addHandler(file_handler)
class ErrorFilter(logging.Filter):
def filter(self, record):
return 'ERROR' in record.getMessage()
logging.getLogger().addFilter(ErrorFilter())
系统日志集成
使用SysLogHandler
将Python日志发送到系统日志(如/var/log/messages
),便于统一管理:
from logging.handlers import SysLogHandler
handler = SysLogHandler(address='/dev/log')
handler.setFormatter(logging.Formatter('%(name)s: %(levelname)s %(message)s'))
logging.getLogger().addHandler(handler)
集中化日志分析
部署ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog,实现日志的集中存储、搜索和可视化,适合分布式系统。
性能优化技巧
concurrent.futures
或logging.handlers.QueueHandler
避免日志记录阻塞主进程。import json
formatter = logging.Formatter(json.dumps({'time': '%(asctime)s', 'level': '%(levelname)s', 'msg': '%(message)s'}))
工具推荐:
journalctl
(查看系统日志)或tail -f app.log
(实时跟踪文件日志)。