CentOS Python日志如何查看与管理
导读:CentOS下Python日志的查看与管理指南 一、Python日志的基础配置 Python内置的logging模块是日志管理的核心工具,支持分级记录(DEBUG/INFO/WARNING/ERROR/CRITICAL)、多目的地输出(控制...
CentOS下Python日志的查看与管理指南
一、Python日志的基础配置
Python内置的logging
模块是日志管理的核心工具,支持分级记录(DEBUG/INFO/WARNING/ERROR/CRITICAL)、多目的地输出(控制台/文件/系统日志)和格式自定义。以下是基础配置示例:
import logging
# 基础配置(快速设置)
logging.basicConfig(
level=logging.INFO, # 设置日志级别(低于此级别的日志不会记录)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 日志格式(时间、模块名、级别、消息)
filename='app.log', # 日志文件路径(默认当前目录)
filemode='a' # 文件模式('a'追加,'w'覆盖)
)
# 记录日志
logging.debug('调试信息') # 不会记录(级别低于INFO)
logging.info('程序正常运行') # 会记录
logging.error('发生错误!') # 会记录
关键说明:
- 日志级别从低到高为
DEBUG
→INFO
→WARNING
→ERROR
→CRITICAL
,设置level
后可过滤低级别日志。 filename
指定日志文件路径,若未指定则输出到控制台(通过StreamHandler
)。
二、日志文件的常见位置
Python日志文件的位置取决于代码配置,常见场景如下:
- 代码中明确指定:如上述示例中的
app.log
(当前目录)或/var/log/myapp/app.log
(绝对路径)。 - 应用程序配置文件:如Django的
settings.py
(LOGGING
字典)、Flask的config.py
(LOGGER_NAME
),需查找LOG_FILE
、LOG_PATH
等参数。 - 系统日志:若使用
SysLogHandler
(address='/dev/log'
),日志会写入系统日志(如/var/log/syslog
或/var/log/messages
)。 - 默认路径:若未配置,部分框架(如Django)会将日志输出到项目目录下的
logs/
文件夹。
三、日志查看工具与命令
-
直接查看日志文件:
使用cat
、less
或tail
命令查看日志内容:cat /var/log/myapp/app.log # 查看完整日志 tail -f /var/log/myapp/app.log # 实时查看日志末尾(新增内容动态刷新) grep "ERROR" /var/log/myapp/app.log # 过滤错误日志
-
使用journalctl查看系统日志:
若Python日志写入系统日志(如通过SysLogHandler
),可通过journalctl
命令查看:sudo journalctl -u your_app_service_name # 查看指定服务的日志(需替换为实际服务名) sudo journalctl -u your_app_service_name | grep "Python" # 过滤Python相关日志 sudo journalctl -f # 实时查看系统日志变化
-
第三方工具:
- ELK Stack(Elasticsearch+Logstash+Kibana):用于大规模日志分析、可视化(如趋势图、搜索框)。
- Logrotate:用于日志轮转(见下文“日志轮转”部分)。
四、日志轮转配置(防止日志过大)
日志轮转可自动分割、压缩旧日志,避免单个文件过大。常用方法有两种:
1. 使用Python内置的RotatingFileHandler
或TimedRotatingFileHandler
-
按大小轮转(
RotatingFileHandler
):当日志文件达到指定大小时,创建新文件并保留指定数量的旧文件。from logging.handlers import RotatingFileHandler handler = RotatingFileHandler( '/var/log/myapp/app.log', # 日志文件路径 maxBytes=10*1024*1024, # 单个文件最大大小(10MB) backupCount=5 # 保留的旧文件数量 ) handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) logging.getLogger().addHandler(handler)
-
按时长轮转(
TimedRotatingFileHandler
):按天/小时/周等周期轮转日志。from logging.handlers import TimedRotatingFileHandler handler = TimedRotatingFileHandler( '/var/log/myapp/timed_app.log', # 日志文件路径 when='midnight', # 轮转时间(每天午夜) interval=1, # 轮转间隔(1天) backupCount=7 # 保留的旧文件数量(7天) ) handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) logging.getLogger().addHandler(handler)
2. 使用系统级logrotate
工具
logrotate
是CentOS自带的日志管理工具,可配置定时任务自动轮转日志。
- 创建配置文件(如
/etc/logrotate.d/myapp
):/var/log/myapp/*.log { # 匹配日志文件路径(支持通配符) daily # 每天轮转 rotate 7 # 保留7个旧日志 compress # 压缩旧日志(如.gz格式) missingok # 若日志文件不存在也不报错 notifempty # 若日志为空则不轮转 create 640 root adm # 创建新日志时的权限和所有者 }
- 手动测试配置:
sudo logrotate -vf /etc/logrotate.d/myapp # 强制轮转并显示详细信息
注意:若日志文件路径为/var/log/myapp/app.log
,需确保运行Python应用的用户(如root
或应用用户)对该目录有写入权限(chmod 755 /var/log/myapp
)。
五、进阶:将日志发送到系统日志(syslog)
若需要将Python日志与系统日志统一管理,可使用SysLogHandler
:
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger('myapp')
logger.setLevel(logging.INFO)
# 配置SysLogHandler(本地系统日志)
handler = SysLogHandler(address='/dev/log') # CentOS系统日志路径
handler.setFormatter(logging.Formatter('myapp[%(process)d]: %(levelname)s - %(message)s'))
logger.addHandler(handler)
# 记录日志(会写入/var/log/syslog)
logger.info('This is a system log message')
说明:
address='/dev/log'
表示连接到本地系统日志服务(syslog)。- 日志会出现在
/var/log/syslog
(CentOS 7之前)或/var/log/messages
(CentOS 7及之后)中,可通过grep "myapp" /var/log/syslog
过滤。
通过以上步骤,可实现CentOS下Python日志的有效查看(实时/历史)、管理(轮转/权限)和扩展(系统日志/ELK分析),满足不同场景的需求。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Python日志如何查看与管理
本文地址: https://pptw.com/jishu/723912.html