CentOS下Python日志管理操作指南
在CentOS系统中管理Python日志前,需确保环境满足以下要求:
sudo yum install python3 python3-pip
python3 --version检查是否安装成功(建议使用Python 3.6及以上版本)。Python的logging模块是原生支持的日志工具,可实现灵活的日志记录与管理。以下是核心配置步骤:
通过basicConfig快速设置日志级别、格式及输出目标(控制台+文件):
import logging
# 配置日志:级别为INFO,格式包含时间、模块名、级别、消息,输出到app.log和控制台
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='app.log', # 日志文件路径(当前目录)
filemode='a' # 追加模式(默认)
)
# 获取logger实例(推荐使用模块名作为logger名)
logger = logging.getLogger(__name__)
# 记录不同级别日志
logger.debug('Debug信息(仅调试时显示)')
logger.info('程序正常运行的信息')
logger.warning('潜在问题警告')
logger.error('运行时错误')
logger.critical('严重错误(可能导致程序崩溃)')
说明:level参数控制日志输出阈值(如INFO及以上级别会输出),format定义日志格式,filename指定日志文件路径。
当日志文件过大时,需通过日志轮转分割文件。Python提供了两种轮转方式:
RotatingFileHandler):from logging.handlers import RotatingFileHandler
# 创建RotatingFileHandler:maxBytes=10MB,保留5个备份
rotating_handler = RotatingFileHandler(
'/var/log/myapp/app.log', # 日志文件路径(需提前创建目录)
maxBytes=10*1024*1024, # 10MB
backupCount=5 # 保留5个备份文件
)
rotating_handler.setLevel(logging.INFO)
rotating_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger.addHandler(rotating_handler)
TimedRotatingFileHandler):from logging.handlers import TimedRotatingFileHandler
# 创建TimedRotatingFileHandler:每天午夜轮转,保留7天
timed_handler = TimedRotatingFileHandler(
'/var/log/myapp/app.log',
when='midnight', # 每天午夜
interval=1, # 每天
backupCount=7 # 保留7天
)
timed_handler.setLevel(logging.INFO)
timed_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger.addHandler(timed_handler)
Python日志级别从低到高依次为:
DEBUG:详细调试信息(开发阶段使用)INFO:程序正常运行的提示信息(生产环境常用)WARNING:潜在问题警告(如磁盘空间不足)ERROR:运行时错误(如数据库连接失败)CRITICAL:严重错误(如程序崩溃)可通过logger.setLevel()设置日志级别,低于该级别的日志不会输出。
若需将Python日志整合到CentOS系统日志(syslog)中,可使用SysLogHandler:
import logging
from logging.handlers import SysLogHandler
# 配置SysLogHandler:发送到本地syslog(/dev/log)
syslog_handler = SysLogHandler(address='/dev/log')
syslog_handler.setLevel(logging.WARNING) # 仅发送WARNING及以上级别
syslog_handler.setFormatter(logging.Formatter('myapp[%(process)d]: %(levelname)s - %(message)s'))
logger.addHandler(syslog_handler)
说明:address参数指定syslog地址(/dev/log为本地syslog,默认端口514),formatter中的myapp为程序标识,方便在系统日志中过滤。
Python应用程序需有权限写入日志文件。若日志目录为/var/log/myapp/,可执行以下操作:
# 创建日志目录(若不存在)
sudo mkdir -p /var/log/myapp/
# 更改目录所有者为运行Python应用的用户(如当前用户为ubuntu)
sudo chown -R $USER:$USER /var/log/myapp/
# 设置目录权限(755:所有者可读写执行,其他用户可读执行)
sudo chmod -R 755 /var/log/myapp/
注意:避免将日志目录权限设为777(完全开放),以免引发安全问题。
虽然Python的RotatingFileHandler可实现日志轮转,但CentOS的logrotate工具更强大(支持压缩、定时任务等)。以下是配置步骤:
/etc/logrotate.d/目录下创建myapp文件:sudo vi /etc/logrotate.d/myapp
添加以下内容:/var/log/myapp/*.log {
daily # 每天轮转
rotate 7 # 保留7个备份
compress # 压缩备份文件(.gz格式)
missingok # 若日志文件不存在,不报错
notifempty # 若日志为空,不轮转
create 640 root adm # 创建新日志文件,权限640,所有者root,组adm
sharedscripts # 所有日志轮转完成后执行postrotate脚本
postrotate
systemctl restart rsyslog # 重启rsyslog服务(可选)
endscript
}
sudo logrotate -vf /etc/logrotate.d/myapp
说明:-v表示详细模式,-f表示强制轮转(即使未到轮转时间)。若需更简洁的API或高级功能(如自动异步日志、结构化日志),可使用第三方库loguru:
from loguru import logger
# 配置loguru:输出到文件,按大小轮转(10MB),保留5个备份
logger.add(
"/var/log/myapp/app.log",
rotation="10 MB",
retention=5,
compression="zip" # 压缩备份文件
)
# 记录日志(无需获取logger实例)
logger.info("This is an info message from loguru")
logger.error("This is an error message from loguru")
优势:loguru的API更简单,支持链式调用,且默认开启日志轮转,无需手动配置处理器。
cat、less或tail命令查看日志内容:cat /var/log/myapp/app.log # 查看全部日志
less /var/log/myapp/app.log # 分页查看(按q退出)
tail -f /var/log/myapp/app.log # 实时查看最新日志(Ctrl+C退出)
journalctl过滤查看:sudo journalctl -u myapp.service # 查看指定服务的日志(需配置systemd服务)
sudo journalctl | grep "myapp" # 过滤包含"myapp"的日志
通过以上步骤,可在CentOS系统中高效管理Python日志,实现日志记录、轮转、整合与分析的全生命周期管理。