发布于2026-07-20 阅读(0)
扫一扫,手机访问
CentOS下Python日志管理操作指南

其实很多人可能不知道,在CentOS系统上做Python日志管理,看似简单,但真正用好、用对,还是有不少细节值得注意。下面我就从最基础的环境准备开始,一步步把这件事讲透。
首先要确保CentOS系统已经装好了Python 3和pip。如果还没装,可以用下面这条命令一步到位:
sudo yum install python3 python3-pip -y
装完之后,验证一下是否成功:
python3 --version# 检查Python版本pip3 --version # 检查pip版本
对于简单的场景,用logging.basicConfig()就能快速搞定日志输出,既写文件也打印到控制台。来看一个最直接的例子:
import logging# 配置日志:级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)、格式、文件、模式logging.basicConfig(level=logging.INFO,# 设置最低日志级别(低于此级别的不记录)format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',# 日志格式(时间、模块名、级别、消息)filename='app.log',# 日志文件路径(当前目录)filemode='a' # 文件模式('a'=追加,'w'=覆盖))# 获取logger实例(推荐使用模块名__name__,便于区分不同模块日志)logger = logging.getLogger(__name__)# 记录不同级别日志logger.debug('Debug信息(调试用,生产环境建议关闭)')logger.info('程序正常运行的信息')logger.warning('警告信息(潜在问题)')logger.error('错误信息(功能异常)')logger.critical('严重错误信息(系统可能崩溃)')
运行脚本后,当前目录下会生成一个app.log文件,里面就包含了上面这些日志内容。
日志文件如果不加控制,迟早会撑爆磁盘。Python提供了两种轮转方式,可以根据实际场景选择。
这种方式的逻辑很简单:当日志文件达到指定大小(比如10MB)时,自动创建一个新文件,同时保留指定数量的旧日志备份。看代码:
from logging.handlers import RotatingFileHandlerlogger = logging.getLogger('my_logger')logger.setLevel(logging.INFO)# 创建RotatingFileHandler:maxBytes=10MB,backupCount=5(保留5个备份)handler = RotatingFileHandler('app_rotating.log',maxBytes=10 * 1024 * 1024,# 10MBbackupCount=5)handler.setLevel(logging.INFO)# 设置日志格式formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)# 添加处理器到loggerlogger.addHandler(handler)# 测试日志记录for i in range(1000):logger.info(f'这是第{i}条日志信息')
运行后,你会看到app_rotating.log(当前日志)和app_rotating.log.1~app_rotating.log.5(旧日志)这些文件。
对于长期运行的应用,按时间轮转更合适,比如每天或每小时生成一个新日志文件。代码示例如下:
from logging.handlers import TimedRotatingFileHandlerlogger = logging.getLogger('my_logger')logger.setLevel(logging.INFO)# 创建TimedRotatingFileHandler:when='midnight'(每天凌晨),interval=1(每天),backupCount=7(保留7天)handler = TimedRotatingFileHandler('app_timed.log',when='midnight',# 时间间隔(midnight=凌晨0点,hourly=每小时)interval=1, # 间隔数量(如1表示每天/每小时)backupCount=7 # 保留旧日志天数)handler.setLevel(logging.INFO)# 设置日志格式formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)# 添加处理器到loggerlogger.addHandler(handler)# 测试日志记录logger.info('这是一条按时间轮转的日志')
运行后,每天凌晨系统会自动生成新的app_timed.log,并保留最近7天的旧日志。
如果想把Python日志集成到CentOS的系统日志(比如/var/log/messages),可以用SysLogHandler。实现起来也很直接:
import loggingfrom logging.handlers import SysLogHandlerlogger = logging.getLogger('my_logger')logger.setLevel(logging.INFO)# 创建SysLogHandler:address='/dev/log'(CentOS系统日志地址)handler = SysLogHandler(address='/dev/log')handler.setLevel(logging.INFO)# 设置日志格式(syslog专用格式)formatter = logging.Formatter('%(name)s: %(levelname)s %(message)s')handler.setFormatter(formatter)# 添加处理器到loggerlogger.addHandler(handler)# 测试日志记录logger.info('这是一条发送到系统日志的信息')
运行后,日志会出现在/var/log/messages中(需要root权限才能查看):
sudo tail -f /var/log/messages
对于复杂项目,直接在代码里写死日志配置并不是好习惯。一个更专业的方式是使用INI格式的配置文件(比如logging.conf),这样以后改配置只需要改文件,不用动代码。
logging.conf[loggers]keys=root,my_logger# 定义logger名称(root为根logger,my_logger为自定义logger)[handlers]keys=fileHandler,consoleHandler# 定义处理器名称(fileHandler=文件,consoleHandler=控制台)[formatters]keys=simpleFormatter# 定义格式化器名称# 配置root logger(默认logger)[logger_root]level=DEBUGhandlers=consoleHandler# 只输出到控制台# 配置自定义logger(my_logger)[logger_my_logger]level=INFOhandlers=fileHandler,consoleHandler# 输出到文件和控制台qualname=my_logger# logger名称(需与代码中getLogger一致)propagate=0 # 是否向父logger传递(0=不传递)# 配置文件处理器[handler_fileHandler]class=FileHandlerlevel=INFOformatter=simpleFormatterargs=('app_config.log', 'a')# 日志文件路径和模式# 配置控制台处理器[handler_consoleHandler]class=StreamHandlerlevel=DEBUGformatter=simpleFormatterargs=(sys.stdout,)# 输出到控制台# 配置格式化器[formatter_simpleFormatter]format=%(asctime)s - %(name)s - %(levelname)s - %(message)sdatefmt=%Y-%m-%d %H:%M:%S# 时间格式
import loggingimport logging.config# 加载配置文件logging.config.fileConfig('logging.conf')# 获取自定义loggerlogger = logging.getLogger('my_logger')# 记录日志logger.debug('Debug信息(不会输出到文件,因为fileHandler级别为INFO)')logger.info('Info信息(输出到文件和控制台)')logger.warning('Warning信息(输出到文件和控制台)')
配置文件的好处是显而易见的:所有日志相关的设置都集中在一个地方管理,修改级别、格式、输出目标时,完全不需要改代码。
日常查看日志,通常用cat、tail这些命令就够了:
cat app.log# 查看完整日志tail -f app.log# 实时查看日志更新(按Ctrl+C退出)tail -n 20 app.log # 查看最后20行日志
如果系统里运行着多个Python应用,或者需要更强大的日志轮转功能(比如自动压缩、删除旧日志),那么用CentOS自带的logrotate工具会更省心。创建一个自定义配置文件/etc/logrotate.d/my_python_app:
/var/log/myapp.log {# 日志文件路径(需与Python日志路径一致)daily # 每天轮转rotate 7# 保留7个旧日志compress# 压缩旧日志(如app.log.1.gz)missingok # 日志文件不存在时不报错notifempty# 日志为空时不轮转create 640 root adm# 创建新日志的权限和所有者}
测试一下配置是否生效:
sudo logrotate -vf /etc/logrotate.d/my_python_app# 强制轮转并显示详细信息
一旦配置好,logrotate就会自动处理日志轮转,完全不需要改Python代码。
日志级别选择:生产环境建议设置为INFO或WARNING,别一股脑输出DEBUG日志,否则性能会受影响。开发环境调到DEBUG方便排查问题。
日志文件权限:确保日志文件所在的目录有写入权限,比如chmod 755 /path/to/logs,不然日志写不进去,排查起来会很头疼。
敏感信息过滤:密码、密钥这些敏感信息绝对不要出现在日志里。可以通过自定义Formatter或Filter来做过滤。
性能优化:如果代码里有高频日志记录(比如循环内),建议用异步日志库(比如concurrent-log-handler),避免阻塞主线程。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8