logging模块用法

一、logging 模块的作用

logging 的核心功能是:

在程序运行过程中,输出并记录各种级别的日志(调试信息、警告、错误、关键事件等)。

相比 print(),它的优势:

特点 print() logging
输出级别控制 ❌ 无 ✅ 支持 DEBUG/INFO/WARNING/ERROR/CRITICAL
输出到文件 ❌ 不行 ✅ 可以写入文件、控制台、网络、Syslog
可格式化输出 ❌ 简单 ✅ 自定义时间、模块、行号等格式
生产环境适用 ❌ 不适合 ✅ 广泛用于企业级系统日志、运维脚本

二、基础用法

示例 1:最简单的日志输出

import logging

logging.basicConfig(level=logging.INFO)
logging.info("启动程序")
logging.warning("磁盘空间不足")
logging.error("无法连接数据库")

输出:

INFO:root:启动程序
WARNING:root:磁盘空间不足
ERROR:root:无法连接数据库

三、日志级别(Level)

logging 内置 5 个常用日志等级(从低到高):

级别名 常量 用途
DEBUG 10 调试信息(开发阶段)
INFO 20 一般运行信息(系统状态、启动完成)
WARNING 30 警告(潜在问题、不影响运行)
ERROR 40 错误(程序异常、功能失败)
CRITICAL 50 严重错误(系统崩溃)

在设置 basicConfig(level=logging.INFO) 时,
表示 只输出 INFO 及以上等级的日志


四、输出格式控制

使用 format 参数定义日志格式:

logging.basicConfig(
    level=logging.INFO,
    format="[%(levelname)s] %(asctime)s - %(filename)s:%(lineno)d - %(message)s"
)

输出示例:

[INFO] 2025-10-15 11:48:23,001 - my_script.py:42 - 启动 Docker 容器成功

常用格式化变量:

变量 含义
%(asctime)s 时间
%(levelname)s 日志级别
%(filename)s 文件名
%(lineno)d 行号
%(message)s 日志内容
%(name)s Logger 名称

五、输出到文件

logging.basicConfig(
    level=logging.INFO,
    filename='/var/log/python_docker.log',
    filemode='a',   # 追加模式
    format='%(asctime)s [%(levelname)s] %(message)s'
)

logging.info("程序启动")
logging.error("Docker 启动失败")

输出到 /var/log/python_docker.log 文件中。


六、高级用法:多 Handler 输出

你可以同时输出到控制台和文件:

import logging

# 创建 Logger
logger = logging.getLogger("docker_manager")
logger.setLevel(logging.INFO)

# 创建 Handler(控制台 + 文件)
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler("/tmp/docker_manager.log")

# 定义输出格式
formatter = logging.Formatter(
    "%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s"
)
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加 Handler
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 使用日志
logger.info("容器启动成功")
logger.warning("镜像不存在,将尝试重新加载")

输出结果:

  • 控制台打印日志
  • 同时 /tmp/docker_manager.log 也保存日志内容

七、在实际项目中用法(比如你的 PythonDocker

import logging
from docker import from_env
from packaging.version import Version

logging.basicConfig(
    level=logging.INFO,
    format="[%(asctime)s] [%(levelname)s] %(message)s"
)

class PythonDocker:
    client = from_env()

    @classmethod
    def check_version(cls):
        version = cls.client.version()['Components'][0]['Version']
        if Version(version) < Version("19.03"):
            logging.error(f"Docker 版本太低:{version},请升级到 ≥ 19.03")
        else:
            logging.info(f"Docker 版本检测通过:{version}")

运行时日志:

[2025-10-15 11:58:10] [INFO] Docker 版本检测通过:20.10.23

八、实战总结表

功能 用法示例
输出日志 logging.info("启动成功")
级别设置 logging.basicConfig(level=logging.DEBUG)
输出格式 format="%(asctime)s [%(levelname)s] %(message)s"
输出到文件 filename="/var/log/app.log"
同时输出到控制台与文件 Handler
动态调整级别 logger.setLevel(logging.WARNING)
自定义日志对象 logger = logging.getLogger("app")

posted @ 2025-10-15 13:02  梁永旺  阅读(19)  评论(0)    收藏  举报