在Debian系统中,Python日志配置主要依赖内置logging模块,支持代码动态配置、配置文件加载及系统级日志集成(如syslog)。以下是具体步骤与常见场景的详细说明:
Debian系统通常预装Python 3(可通过python3 --version验证),logging模块为Python标准库,无需额外安装。若需第三方日志库(如Loguru,简化配置),可通过pip3安装:
sudo apt update
sudo apt install python3 python3-pip # 确保Python及pip已安装
pip3 install loguru # 可选:安装Loguru(第三方日志库)
通过logging模块的basicConfig快速设置日志级别、格式及输出目标(如文件、控制台):
import logging
# 配置日志:级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)、格式、输出文件
logging.basicConfig(
level=logging.DEBUG, # 设置最低日志级别(低于此级别的日志将被忽略)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 日志格式(时间、模块名、级别、消息)
filename='app.log', # 日志文件路径(当前目录)
filemode='a' # 文件模式('a'=追加,'w'=覆盖)
)
# 获取日志记录器(推荐使用模块名作为记录器名称,便于区分)
logger = logging.getLogger(__name__)
# 记录不同级别日志
logger.debug('Debug message: 程序启动') # 调试信息(详细流程)
logger.info('Info message: 用户登录成功') # 普通信息(业务状态)
logger.warning('Warning message: 磁盘空间不足') # 警告(潜在问题)
logger.error('Error message: 数据库连接失败') # 错误(功能异常)
logger.critical('Critical message: 服务崩溃') # 严重错误(需立即处理)
运行脚本后,日志将输出到app.log文件,格式如:2025-10-08 14:30:00 - __main__ - INFO - Info message: 用户登录成功。
当日志文件达到一定大小时,需自动分割备份(如按大小或时间分割)。常用RotatingFileHandler(按大小轮转)或TimedRotatingFileHandler(按时间轮转):
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# 创建RotatingFileHandler:maxBytes=10MB,保留5个备份
handler = RotatingFileHandler(
'app_rotating.log',
maxBytes=10*1024*1024, # 10MB
backupCount=5 # 最多保留5个备份文件(如app_rotating.log.1~.5)
)
handler.setLevel(logging.DEBUG)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 添加处理器到记录器
logger.addHandler(handler)
# 测试日志(超过10MB会自动创建备份)
for i in range(10000):
logger.info(f'Log entry {i}')
from logging.handlers import TimedRotatingFileHandler
handler = TimedRotatingFileHandler(
'app_timed.log',
when='midnight', # 每天午夜分割
interval=1, # 每天1次
backupCount=7 # 保留7天备份
)
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)
logger.addHandler(handler)
轮转后的日志文件会自动重命名为app_rotating.log.1、app_rotating.log.2等,避免单个文件过大。
通过外部配置文件(如logging.conf)分离配置与代码,便于维护。配置文件示例(logging.conf):
[loggers]
keys=root
[handlers]
keys=fileHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=fileHandler
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('app_config.log', 'a')
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
代码中加载配置文件:
import logging
import logging.config
# 加载配置文件
logging.config.fileConfig('logging.conf')
# 获取记录器
logger = logging.getLogger(__name__)
logger.info('This is an info message from config file')
配置文件支持更复杂的设置(如多记录器、不同处理器),详情参考Python官方文档。
将Python日志发送到系统日志服务(syslog),便于统一管理。使用SysLogHandler:
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 创建SysLogHandler(地址为系统syslog socket)
handler = SysLogHandler(address='/dev/log') # Debian默认syslog路径
handler.setLevel(logging.INFO)
# 设置格式(syslog专用格式)
formatter = logging.Formatter('%(name)s: %(levelname)s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
# 记录日志(将出现在系统日志中)
logger.info('System log message: User logged in')
系统日志默认存储在/var/log/syslog(Debian),可通过tail -f /var/log/syslog实时查看。
确保日志文件的权限正确,避免应用程序无法写入。例如,将日志文件所有者设为当前用户:
touch app.log # 创建日志文件
sudo chown $USER:$USER app.log # 修改所有者($USER为当前用户)
sudo chmod 664 app.log # 设置权限(用户可读写,组可读,其他可读)
若需更简洁的API,可使用Loguru库(无需手动配置处理器):
from loguru import logger
# 配置日志(输出到文件+控制台,自动轮转)
logger.add("file_loguru.log", rotation="10 MB", level="DEBUG") # 10MB轮转
logger.add(sys.stdout, level="INFO") # 控制台输出INFO及以上
# 记录日志
logger.debug('Debug message (only to file)')
logger.info('Info message (to file and console)')
logger.error('Error message (to file and console)')
Loguru自动处理日志轮转、格式化,适合快速开发。
通过以上方法,可在Debian系统中灵活配置Python日志,满足不同场景的需求(如开发调试、生产监控)。