温馨提示×

Python在CentOS上的日志管理怎么做

小樊
43
2025-10-26 06:20:52
栏目: 编程语言

Python在CentOS上的日志管理方案

1. 基础:使用Python内置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)  # 添加到根记录器
    

2. 高级:第三方库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')  # 无需手动配置处理器
    
  • 优势:支持彩色终端输出异步日志异常堆栈自动捕获,配置更直观。

3. 系统集成:与rsyslog协作

将Python日志发送到系统日志服务(rsyslog),统一管理所有系统日志。

  • 配置步骤
    1. 编辑rsyslog配置文件(/etc/rsyslog.d/python_app.conf):
      local0.* /var/log/myapp/syslog.log  # 将local0设施的日志写入指定文件
      & stop  # 停止进一步转发(避免重复记录)
      
    2. 在Python代码中使用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
      
    3. 重启rsyslog服务:
      sudo systemctl restart rsyslog
      

4. 日志轮转优化(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  # 强制轮转并显示详细信息
    

5. 日志分析与可视化(ELK Stack)

对于大规模应用,可使用ELK Stack(Elasticsearch+Logstash+Kibana)实现日志的集中存储、搜索和可视化

  • 流程
    1. 收集日志:通过Filebeat(轻量级日志收集器)读取Python日志文件(/var/log/myapp/*.log)。
    2. 处理日志:使用Logstash解析日志(如提取时间戳、级别、消息),发送到Elasticsearch
    3. 可视化:通过Kibana创建仪表盘,分析日志趋势(如错误率、访问量)。
  • 简化配置
    • Filebeat配置中添加Python日志路径:
      filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - /var/log/myapp/*.log
      
    • Logstash中编写Grok过滤器解析日志格式。

6. 权限与安全注意事项

  • 日志文件权限:确保Python应用用户(如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上的灵活日志记录、自动轮转、系统集成高级分析,满足从开发到生产的全生命周期需求。

0