Ubuntu系统中Python日志怎么配置
导读:Ubuntu系统中Python日志配置方法 1. 使用内置logging模块的基本配置(快速上手) Python标准库的logging模块提供了基础配置能力,适合简单场景。通过basicConfig函数可快速设置日志级别、输出格式、文件路径...
Ubuntu系统中Python日志配置方法
1. 使用内置logging
模块的基本配置(快速上手)
Python标准库的logging
模块提供了基础配置能力,适合简单场景。通过basicConfig
函数可快速设置日志级别、输出格式、文件路径等参数。
示例代码:
import logging
# 配置日志:DEBUG级别、自定义格式、输出到app.log(追加模式)
logging.basicConfig(
level=logging.DEBUG, # 日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 日志格式(时间+记录器名+级别+消息)
datefmt='%Y-%m-%d %H:%M:%S', # 时间格式
filename='app.log', # 日志文件路径(Ubuntu下可指定绝对路径,如/home/user/app.log)
filemode='a' # 文件模式:'a'(追加,默认)或'w'(覆盖)
)
# 获取记录器(默认使用根记录器)
logger = logging.getLogger(__name__) # __name__为当前模块名,便于区分不同模块的日志
# 记录不同级别日志
logger.debug('Debug信息:程序启动') # 仅当level=DEBUG时输出
logger.info('Info信息:用户登录成功') # 常规运行信息
logger.warning('Warning信息:磁盘空间不足') # 潜在问题预警
logger.error('Error信息:数据库连接失败') # 运行时错误
logger.critical('Critical信息:系统崩溃') # 严重错误(需立即处理)
说明:
- 日志级别从低到高为
DEBUG
→INFO
→WARNING
→ERROR
→CRITICAL
,设置level
后,低于该级别的日志不会输出。 filename
参数指定日志文件路径(如/var/log/myapp/app.log
),需确保Python进程对该路径有写入权限(可通过chmod
命令修改权限)。
2. 使用配置文件(推荐:灵活易维护)
通过配置文件(如INI、JSON、YAML)管理日志配置,避免硬编码,方便修改无需改动代码。以下以INI格式为例(Ubuntu下常用):
步骤1:创建配置文件(如logging.conf
)
[loggers]
keys=root # 定义根记录器(必选)
[handlers]
keys=consoleHandler,fileHandler # 定义处理器(控制台+文件)
[formatters]
keys=simpleFormatter # 定义格式化器(统一日志格式)
# 根记录器配置:关联处理器
[logger_root]
level=DEBUG # 根记录器级别
handlers=consoleHandler,fileHandler # 关联的处理器列表
# 控制台处理器:输出到终端
[handler_consoleHandler]
class=StreamHandler # 处理器类(StreamHandler输出到流,如stdout/stderr)
level=DEBUG # 处理器级别(可单独设置,低于根记录器则生效)
formatter=simpleFormatter # 关联的格式化器
args=(sys.stdout,) # 参数:输出到标准输出(控制台)
# 文件处理器:输出到文件(带轮转)
[handler_fileHandler]
class=logging.handlers.RotatingFileHandler # 文件处理器(支持轮转)
level=DEBUG
formatter=simpleFormatter
args=('app.log', 'a', 1024*1024, 3) # 参数:文件名、模式(追加)、最大大小(1MB)、备份数量(保留3个旧文件)
# 格式化器:定义日志输出格式
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s # 时间+记录器名+级别+消息
datefmt=%Y-%m-%d %H:%M:%S # 时间格式
步骤2:Python脚本加载配置文件
import logging
import logging.config
# 加载配置文件(需指定正确路径,如当前目录下的logging.conf)
logging.config.fileConfig('logging.conf')
# 获取记录器(继承根记录器配置)
logger = logging.getLogger(__name__)
# 记录日志(遵循配置文件的规则)
logger.info('程序启动(配置文件模式)')
logger.error('发生错误(将输出到控制台和文件)')
说明:
RotatingFileHandler
实现了日志轮转(当文件达到指定大小时,自动创建新文件并保留指定数量的旧文件),避免日志文件过大。- 配置文件中的
args
参数需根据处理器类调整(如FileHandler
只需文件名,RotatingFileHandler
需额外指定大小和备份数量)。
3. 高级配置:日志轮转与清理
日志文件长期积累会占用大量磁盘空间,需通过**轮转(Rotation)**机制自动管理。logging
模块提供了两种轮转处理器:
RotatingFileHandler
:按文件大小轮转(如每1MB一个文件,保留3个)。TimedRotatingFileHandler
:按时间轮转(如每天、每小时生成一个新文件)。
示例:按天轮转日志(TimedRotatingFileHandler
)
import logging
from logging.handlers import TimedRotatingFileHandler
# 创建记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 创建文件处理器(按天轮转,保留7天)
handler = TimedRotatingFileHandler(
filename='/var/log/myapp/app.log', # 日志文件路径
when='midnight', # 轮转时间(每天午夜)
interval=1, # 间隔(1天)
backupCount=7, # 保留旧文件数量(7天)
encoding='utf-8' # 文件编码(避免中文乱码)
)
# 设置格式化器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 添加处理器到记录器
logger.addHandler(handler)
# 记录日志
logger.info('这是一条按天轮转的日志')
说明:
when
参数指定轮转时间单位(midnight
=午夜、S
=秒、M
=分钟、H
=小时、D
=天、W0-W6
=周一到周日)。- Ubuntu下建议将日志文件存放在
/var/log/
目录下(系统日志默认路径),并通过crontab
或logrotate
工具定期清理旧日志(如删除超过30天的日志)。
4. 第三方库:Loguru(简化配置)
若内置logging
模块的配置过于复杂,可使用第三方库Loguru
(更简洁的API)。
安装Loguru
pip install loguru
示例代码
from loguru import logger
# 配置日志:输出到控制台和文件(自动轮转,保留10个文件)
logger.add("app.log", rotation="10 MB", level="DEBUG", format="{
time}
- {
level}
- {
message}
", enqueue=True)
# 记录日志(无需获取记录器,直接调用logger)
logger.debug("Debug信息")
logger.info("Info信息")
logger.error("Error信息")
说明:
logger.add()
方法用于添加日志处理器,支持自动轮转(rotation
参数)、日志过滤(filter
参数)、异步记录(enqueue
参数)等功能。- Loguru的配置更直观,适合快速开发和调试,但生产环境建议使用内置
logging
模块(更稳定、可扩展)。
注意事项
- 权限问题:确保Python进程对日志文件路径有写入权限(如
/var/log/
目录需用sudo chmod 777 /var/log/myapp
修改权限,或使用用户目录下的路径如~/logs/app.log
)。 - 日志级别:生产环境建议设置为
INFO
或WARNING
(避免过多调试日志影响性能),开发环境设置为DEBUG
(便于排查问题)。 - 日志格式:建议包含
%(asctime)s
(时间)、%(name)s
(记录器名)、%(levelname)s
(级别)、%(message)s
(消息)等关键信息,便于后续分析。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu系统中Python日志怎么配置
本文地址: https://pptw.com/jishu/722374.html