温馨提示×

CentOS Python日志管理方法

小樊
37
2025-12-13 19:45:13
栏目: 编程语言

CentOS 上 Python 日志管理实用指南

一 基础配置与输出位置

  • 使用 Python 内置的 logging 模块即可满足大多数场景,支持同时输出到文件控制台,并可按级别分流。示例要点:创建 Logger、添加 FileHandler/StreamHandler、设置 FormatterLevel,在 CentOS 上直接运行脚本即可生效。日志的默认保存位置由代码决定:若使用相对路径(如 ‘app.log’),文件会生成在执行脚本的当前工作目录;建议使用绝对路径(如 /var/log/myapp/app.log)以便统一运维与权限管理。

二 使用 INI 配置文件集中管理

  • 将日志参数外置到 INI 配置文件(如 logging.conf)便于维护与复用。核心结构包含 [loggers] / [handlers] / [formatters] 三大节,示例如下:
[loggers]
keys=root,my_logger

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=fileHandler,consoleHandler

[logger_my_logger]
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=my_logger
propagate=0

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('/var/log/myapp/app.log', 'a')

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
  • 在代码中加载配置并使用:
import logging, logging.config
logging.config.fileConfig('/path/to/logging.conf')
logger = logging.getLogger('my_logger')
logger.info('started')
  • 要点:
    • class=FileHandler/StreamHandler 指定输出目标;args 中文件路径建议使用绝对路径,控制台使用 sys.stdout
    • 可按需扩展多个 Logger/Handler/Formatter,实现不同模块或级别的差异化输出。

三 按级别分文件与多进程安全

  • 按级别分文件:为 INFO/ERROR 等分别创建 FileHandler,在 [handlers][loggers] 中对应绑定,实现“错误日志单独落盘、业务日志统一归档”。示例思路:定义 handler_infos/handler_errors,在 [logger_info]/[logger_error] 中分别指定,形成 info.logerror.log 的分流。
  • 多进程安全:标准 FileHandler 在并发写入时可能出现日志交错/丢失。生产环境建议使用支持并发的 WatchedFileHandler(配合外部日志轮转)或第三方 ConcurrentLogHandler;若使用 systemd 管理进程,也可将日志交由 journald 并通过 SyslogHandler 写入,由系统统一轮转与采集。

四 日志轮转与保留策略

  • 外部轮转(推荐):使用 logrotate 管理日志生命周期,示例配置 /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 30
    missingok
    compress
    delaycompress
    copytruncate
    notifempty
    create 0644 myapp myapp
}
  • 说明:
    • daily / rotate 30 表示按天轮转并保留 30 天;compress 启用压缩节省空间;copytruncate 适用于持续写入的文件句柄场景(避免重启应用);如应用支持 SIGHUP 或具备重新打开日志文件能力,可改用 postrotate 执行 kill -HUP
    • 若采用 TimedRotatingFileHandler(如按天切分),务必设置 when=‘midnight’, backupCount=30 并配合 ConcurrentLogHandler 或外部轮转,避免并发写入冲突与文件句柄问题。

五 运行与运维要点

  • 权限与目录:确保运行用户对日志目录(如 /var/log/myapp)具备写权限,目录属主/属组与权限建议设置为 myapp:myapp / 0755,避免因权限不足导致日志写入失败。
  • 路径规范:代码中尽量使用绝对路径或基于 file 计算日志目录,减少因工作目录变化导致日志“找不到”的问题。
  • 监控与告警:对磁盘空间设置阈值告警(如可用空间低于 10% 触发通知),并定期审计日志内容的关键错误与异常趋势,结合监控平台实现主动告警。

0