在Ubuntu下配置Python日志有三种方式:基础代码配置(logging.basicConfig)、配置文件(INI/YAML)管理和第三方库loguru,均可实现日志级别、格式、文件输出、文件轮转及动态调整,支持按大小或时间轮转,可同时输出到控制台和文件,满足开发调试与生产运维需求。
Ubuntu下Python日志配置设置方法
时间:2026-08-14
浏览:645
文章目录
在 Ubuntu 环境中配置 Python 日志,常见方式主要有三种:直接在代码中配置、通过配置文件集中管理,以及使用第三方库快速完成设置。下面将围绕这三种方案展开说明,并结合日志轮转与 Ubuntu 下的常见问题进行整理。

一、基础代码配置
如果只是进行快速测试,或者项目结构比较简单,直接使用 logging.basicConfig() 即可完成基本日志配置。它可以统一设置日志级别、输出格式和目标文件,适合快速上手。
import logging
# 配置日志:级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)、格式、输出文件(追加模式)
logging.basicConfig(
level=logging.DEBUG, # 设置最低日志级别(低于此级别的日志不记录)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 日志格式(时间+记录器名+级别+消息)
datefmt='%Y-%m-%d %H:%M:%S', # 时间格式
filename='app.log', # 日志文件路径(Ubuntu下默认在脚本同级目录)
filemode='a' # 文件模式:'a'(追加,默认)或'w'(覆盖)
)
# 获取当前模块的日志记录器(__name__为当前模块名,如"main")
logger = logging.getLogger(__name__)
# 记录不同级别的日志
logger.debug('Debug信息:用于排查问题的详细日志') # 仅在level=DEBUG时显示
logger.info('Info信息:程序正常运行的提示') # 如功能启动/完成
logger.warning('Warning信息:潜在问题提醒') # 如资源即将耗尽
logger.error('Error信息:程序错误(不影响运行)') # 如接口调用失败
logger.critical('Critical信息:严重错误(可能导致崩溃)') # 如系统崩溃
执行脚本后,日志会写入 app.log 文件,也会输出到控制台。日志内容通常类似于:2025-10-01 12:00:00 - __main__ - INFO - Info信息:程序正常运行的提示。其中,filemode='a' 表示追加写入;如果希望每次启动程序时覆盖旧日志,可以改为 'w'。
二、配置文件管理
当项目规模增大后,把日志规则直接写在代码中会降低维护效率。此时可以使用配置文件,例如 INI、YAML 或 JSON,将日志配置与业务代码分离,便于团队协作和后期调整。下面以常见的 INI 配置方式为例。
1. 创建配置文件
可以先通过 touch logging.conf 创建配置文件,内容如下:
[loggers]
keys=root,fileLogger # 定义两个记录器:root(默认)和fileLogger(自定义)
[handlers]
keys=consoleHandler,fileHandler # 定义两个处理器:控制台输出和文件输出
[formatters]
keys=simpleFormatter # 定义一种格式化器(日志输出格式)
# ===== 记录器配置 =====
[logger_root]
level=INFO # root记录器的最低级别(控制台输出)
handlers=consoleHandler # 关联控制台处理器
[logger_fileLogger]
level=DEBUG # 自定义记录器的最低级别(文件输出)
handlers=fileHandler # 关联文件处理器
qualname=fileLogger # 记录器名称(获取时用logging.getLogger("fileLogger"))
propagate=0 # 是否向父记录器传递日志(0=不传递,避免重复输出)
# ===== 处理器配置 =====
[handler_consoleHandler]
class=StreamHandler # 控制台处理器(输出到stdout)
level=INFO # 处理器处理的最低级别
formatter=simpleFormatter # 关联格式化器
args=(sys.stdout,) # 参数:标准输出流
[handler_fileHandler]
class=FileHandler # 文件处理器(输出到文件)
level=DEBUG # 处理器处理的最低级别
formatter=simpleFormatter # 关联格式化器
args=('app.log', 'a') # 参数:文件路径(app.log)、模式(追加)
# ===== 格式化器配置 =====
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s # 日志格式
datefmt=%Y-%m-%d %H:%M:%S # 时间格式
2. 在代码中加载配置文件
import logging
import logging.config
# 加载配置文件(需指定正确路径,如当前目录下的logging.conf)
logging.config.fileConfig('logging.conf')
# 获取自定义记录器(对应配置文件中的"fileLogger")
logger = logging.getLogger("fileLogger")
# 记录日志(仅符合fileLogger级别和处理器规则的日志会被输出)
logger.debug('Debug信息:会写入文件') # 写入app.log
logger.info('Info信息:会输出到控制台和文件') # 同时输出到控制台和文件
logger.warning('Warning信息:会输出到控制台和文件')
这种方式下,控制台通常只显示 INFO 及以上级别的日志,而 app.log 中会保存 DEBUG 及以上级别的全部内容。使用配置文件的优势在于,无需修改代码即可调整日志级别、输出位置和显示格式。
三、使用第三方库简化配置
如果希望进一步减少配置步骤,loguru 是常用的第三方日志库。安装命令为 pip install loguru,安装完成后,可以更简洁地实现日志输出、轮转、格式化和异常捕获等功能。
1. 基础配置示例
from loguru import logger
# 配置日志:输出到文件(app.log)、日志轮转(每天1个文件,保留7天)、格式化
logger.add(
"app.log",
rotation="daily", # 每天轮转
retention="7 days", # 保留7天
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", # 格式
level="DEBUG" # 最低级别
)
# 记录日志(无需获取记录器,直接使用logger)
logger.debug('Debug信息:自动写入文件')
logger.info('Info信息:自动输出到控制台和文件')
logger.error('Error信息:自动捕获异常堆栈')
通过一行 logger.add,即可完成文件输出、日志轮转和格式设置。默认情况下,控制台还会显示彩色日志输出,便于查看。
2. 异常捕获示例
from loguru import logger
@logger.catch # 装饰器:自动捕获函数内的异常并记录日志
def divide(a, b):
return a / b
divide(10, 0) # 触发ZeroDivisionError,日志会记录异常堆栈
程序运行后,app.log 会记录完整的异常信息,包括错误类型、堆栈跟踪以及触发位置。这种方式可以减少手动编写异常日志代码的工作量。
四、日志轮转管理
对于长期运行的服务,日志文件会持续增长,如果不进行处理,可能会占用大量磁盘空间。日志轮转的作用,就是按照时间或文件大小自动拆分日志文件,便于管理和清理。
1. 代码配置轮转日志
import logging
from logging.handlers import TimedRotatingFileHandler
# 创建自定义记录器
logger = logging.getLogger("rotating_logger")
logger.setLevel(logging.DEBUG)
# 创建定时轮转处理器(每天午夜轮转,保留30天)
handler = TimedRotatingFileHandler(
filename='app_rotating.log',
when='midnight', # 轮转时间(每天午夜)
interval=1, # 间隔天数
backupCount=30, # 保留天数
encoding='utf-8'
)
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
# 添加处理器到记录器
logger.addHandler(handler)
# 记录日志
logger.info('This log will be rotated daily.')
配置完成后,每天午夜系统会自动将当前日志文件重命名为类似 app_rotating.log.2025-10-01 的形式,并创建新的日志文件继续写入。超过保留期限的历史日志会自动删除。
2. 配置文件实现按大小轮转
如果使用配置文件方式管理日志,也可以在 logging.conf 中加入按大小轮转的处理器:
[handler_rotatingFileHandler]
class=logging.handlers.RotatingFileHandler # 按大小轮转的文件处理器
level=DEBUG
formatter=simpleFormatter
args=('app_rotating.log', 'a', 1024*1024, 5) # 参数:文件路径、模式、最大大小(1MB)、备份数量
当 app_rotating.log 达到 1MB 时,系统会自动重命名旧文件并创建新的日志文件,最多保留 5 个备份文件,例如 app_rotating.log.1、app_rotating.log.2 等。
五、Ubuntu 下的注意事项
- 文件路径权限:如果日志文件保存到
/var/log/python_app/这类系统目录,需要提前创建目录并授予写权限。例如:sudo mkdir -p /var/log/python_app,再执行sudo chown $USER:$USER /var/log/python_app。 - 环境变量设置:如果配置文件中使用了类似
%(LOG_DIR)s的占位符,需要在代码中通过os.environ设置对应变量,例如os.environ['LOG_DIR'] = '/var/log/python_app'。 - 旧日志清理:即使已经配置了日志轮转,历史日志文件仍可能不断累积。可以借助 cron 定时清理,例如每天凌晨删除 7 天前的日志:
0 0 * * * find /var/log/python_app -name "*.log" -mtime +7 -delete。
以上内容基本覆盖了 Ubuntu 下 Python 日志配置的常见使用场景。简单项目适合直接使用代码配置,复杂项目更适合通过配置文件统一管理,而需要更高效率和更多高级功能时,也可以选择 loguru 进行快速配置。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。