ubuntu

Ubuntu Python日志管理怎么实现

小樊
39
2025-12-28 07:02:59
栏目: 编程语言

Ubuntu Python日志管理实战指南

一 基础与快速上手

import logging
from logging.handlers import RotatingFileHandler

# 创建记录器
logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)

# 控制台处理器
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(logging.Formatter("%(levelname)s - %(name)s - %(message)s"))

# 文件处理器(按大小轮转:10MB,保留5个备份)
fh = RotatingFileHandler("app.log", maxBytes=10*1024*1024, backupCount=5)
fh.setLevel(logging.DEBUG)
fh.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))

logger.addHandler(ch)
logger.addHandler(fh)

logger.debug("调试信息")
logger.info("服务启动")
logger.error("发生错误", exc_info=True)  # 记录堆栈

二 配置分离与多环境管理

# config.json
{
  "version": 1,
  "disable_existing_loggers": false,
  "formatters": {
    "simple": {"format": "%(levelname)s - %(message)s"},
    "detailed": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"}
  },
  "handlers": {
    "console": {
      "class": "logging.StreamHandler",
      "level": "DEBUG",
      "formatter": "simple",
      "stream": "ext://sys.stdout"
    },
    "timed_file": {
      "class": "logging.handlers.TimedRotatingFileHandler",
      "level": "INFO",
      "formatter": "detailed",
      "filename": "app.log",
      "when": "midnight",
      "interval": 1,
      "backupCount": 7
    }
  },
  "root": {
    "level": "DEBUG",
    "handlers": ["console", "timed_file"]
  }
}
# 加载配置
import logging.config, json
with open("config.json", "r") as f:
    logging.config.dictConfig(json.load(f))
logger = logging.getLogger(__name__)

三 系统级集成与轮转

/var/log/python/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}
sudo logrotate -f /etc/logrotate.d/python_app
import syslog
syslog.syslog(syslog.LOG_INFO, "来自Python应用的日志")
# 查看:journalctl -f -t python_app

四 第三方与进阶实践

from loguru import logger
logger.add("app.log", rotation="500 MB", retention=5, compression="zip")
logger.info("Hello from Loguru")
import sentry_sdk
from sentry_sdk.integrations.logging import LoggingIntegration
sentry_sdk.init(
    dsn="YOUR_DSN",
    integrations=[LoggingIntegration(level=logging.ERROR, event_level=logging.ERROR)]
)
logger = logging.getLogger(__name__)
try:
    1/0
except Exception:
    logger.exception("除零错误")
import logging, queue
from logging.handlers import QueueHandler, QueueListener

log_q = queue.Queue(-1)
qh = QueueHandler(log_q)
listener = QueueListener(log_q, logging.FileHandler("async.log"), logging.StreamHandler())
listener.start()

logger = logging.getLogger("async")
logger.addHandler(qh)
logger.setLevel(logging.DEBUG)

# ... 业务代码
# 程序退出前:listener.stop()

五 生产落地清单

0
看了该问题的人还看了