一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

CentOS Python日志管理怎样操作

时间:2026-07-26 08:45:49 编辑:袖梨 来源:一聚教程网

CentOS下Python日志管理操作指南

CentOS Python日志管理如何操作

一、基础环境准备

确保CentOS系统已安装Python 3及pip(Python包管理器),若未安装可通过以下命令完成:

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提供两种轮转方式:

1. 按文件大小轮转(RotatingFileHandler)

当日志文件达到指定大小(如10MB)时,自动创建新文件并保留指定数量(如5个)的旧日志:

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(旧日志)。

2. 按时间轮转(TimedRotatingFileHandler)

按时间间隔(如每天、每小时)自动创建新日志文件,适合长期运行的应用:

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天的旧日志。

四、发送日志到系统日志(syslog)

若需将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)管理日志,便于维护和修改:

1. 创建配置文件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# 时间格式

2. 代码中加载配置文件

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信息(输出到文件和控制台)')

配置文件的优势在于:集中管理日志设置(如级别、格式、处理器),无需修改代码即可调整日志行为。

六、日志查看与管理

1. 查看日志文件

使用cattail等命令查看日志文件内容:

cat app.log# 查看完整日志tail -f app.log# 实时查看日志更新(按Ctrl+C退出)tail -n 20 app.log # 查看最后20行日志

2. 使用logrotate管理日志(系统级)

若需更强大的日志轮转功能(如自动压缩、删除旧日志),可使用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# 创建新日志的权限和所有者}

测试logrotate配置:

sudo logrotate -vf /etc/logrotate.d/my_python_app# 强制轮转并显示详细信息

logrotate会自动处理日志轮转,无需修改Python代码。

七、注意事项

  1. 日志级别选择:生产环境建议设置为INFOWARNING,避免输出过多DEBUG日志影响性能;开发环境可设置为DEBUG方便排查问题。
  2. 日志文件权限:确保日志文件的目录有写入权限(如chmod 755 /path/to/logs),避免因权限问题导致日志无法写入。
  3. 敏感信息过滤:避免在日志中记录密码、密钥等敏感信息,可通过自定义FormatterFilter过滤。
  4. 性能优化:高频日志记录(如循环内)建议使用异步日志(如concurrent-log-handler库),避免阻塞主线程。

热门栏目