centos

CentOS Python日志管理技巧

小樊
38
2025-08-12 22:38:17
栏目: 编程语言

以下是CentOS下Python日志管理的实用技巧:

  1. 基础日志配置
    使用Python标准库logging模块,通过basicConfig快速设置日志级别、格式和输出目标(如文件、控制台),示例:

    import logging
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='app.log', filemode='a')
    logging.info('程序启动')  # 记录信息
    
  2. 日志轮转管理

    • Python内置轮转:用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),支持按大小、天数轮转并压缩旧日志。
  3. 日志输出与过滤

    • 多目标输出:同时输出到文件和控制台,通过添加不同处理器实现:
      console_handler = logging.StreamHandler()
      file_handler = logging.FileHandler('app.log')
      logging.getLogger().addHandler(console_handler)
      logging.getLogger().addHandler(file_handler)
      
    • 日志过滤:自定义过滤器,仅记录特定内容(如包含“ERROR”的日志),示例:
      class ErrorFilter(logging.Filter):
          def filter(self, record):
              return 'ERROR' in record.getMessage()
      logging.getLogger().addFilter(ErrorFilter())
      
  4. 系统日志集成
    使用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)
    
  5. 集中化日志分析
    部署ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog,实现日志的集中存储、搜索和可视化,适合分布式系统。

  6. 性能优化技巧

    • 异步日志:使用concurrent.futureslogging.handlers.QueueHandler避免日志记录阻塞主进程。
    • 结构化日志:采用JSON格式记录日志,便于后续分析,示例:
      import json
      formatter = logging.Formatter(json.dumps({'time': '%(asctime)s', 'level': '%(levelname)s', 'msg': '%(message)s'}))
      

工具推荐

0
看了该问题的人还看了