阅读量:3
CentOS 上 Python 日志的查看与分析
一 日志位置与常见来源
- 应用直写日志:由 Python 的 logging 模块写入,路径取决于代码配置;若使用相对路径(如 app.log),文件会生成在启动脚本所在目录;生产环境建议使用绝对路径(如 /var/log/myapp.log)。
- 系统日志:Python 程序若通过 systemd 托管或被 rsyslog 捕获,日志常进入 /var/log/messages、/var/log/secure、/var/log/syslog 等。
- 服务相关日志:若应用是 Web/后台服务,可能写入 /var/log/httpd/、/var/log/nginx/ 等对应服务目录。
以上位置与行为是 CentOS 上定位 Python 日志的首要线索。
二 命令行快速定位与查看
- 实时查看文件尾部:tail -f /var/log/myapp.log(按 Ctrl+C 退出)。
- 关键字检索:grep -i “error|exception” /var/log/myapp.log;结合正则可进一步精确定位堆栈或模块。
- 查看 systemd 服务日志:journalctl -u your-python.service -f(实时);journalctl -u your-python.service --since “2025-12-19 00:00:00”。
- 查看系统通用日志:tail -f /var/log/messages;安全相关:tail -f /var/log/secure。
- 权限提示:读取 /var/log/ 下文件通常需要 root 或加入 adm 组;必要时用 sudo。
以上命令覆盖日常排查的高频场景,能快速缩小问题范围。
三 用 Python 脚本读取与分析
- 读取并筛选高优先级日志(适合大文件逐行处理):
def parse_log(file_path, keywords=("ERROR", "WARNING")):
try:
with open(file_path, "r", errors="ignore") as f:
for line in f:
if any(k in line for k in keywords):
print(line.rstrip())
except Exception as e:
print(f"读取失败: {e}")
if __name__ == "__main__":
parse_log("/var/log/myapp.log")
- 读取最近 N 行(避免一次性加载大文件):
from collections import deque
def tail_log(file_path, n=50):
try:
with open(file_path, "r", errors="ignore") as f:
return "".join(deque(f, n))
except Exception as e:
return f"读取失败: {e}"
print(tail_log("/var/log/myapp.log", 100))
- 解析常见 syslog 格式行(示例字段提取):
import re
from datetime import datetime
SYSLOG_RE = re.compile(
r"(?P\w{3}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2})"
r"\s+(?P\S+)\s+(?P\S+)\[?(?P\d*)\]?:\s+(?P.*)"
)
def parse_syslog_line(line):
m = SYSLOG_RE.match(line)
if m:
data = m.groupdict()
# 将时间转为 datetime 便于后续排序/聚合
try:
ts = datetime.strptime(data["timestamp"], "%b %d %H:%M:%S")
data["timestamp"] = ts
except ValueError:
pass
return data
return None
- 运行脚本前,确保对日志文件具备读取权限;必要时使用 sudo 或将日志放到应用可写目录。
四 日志配置与长期治理
- 使用 RotatingFileHandler 控制单文件大小并自动切分,避免磁盘被撑满:
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger("myapp")
logger.setLevel(logging.INFO)
handler = RotatingFileHandler(
"/var/log/myapp.log", maxBytes=10*1024*1024, backupCount=5
)
formatter = logging.Formatter(
"%(asctime)s %(levelname)s %(name)s %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("应用启动")
- 配置 logrotate 做按日/按大小轮转与压缩(创建 /etc/logrotate.d/myapp):
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
- 集中化与可视化:小规模可用 rsyslog 做转发;中大规模建议 ELK(Elasticsearch + Logstash + Kibana) 或同类方案做检索、聚合与告警。
- 运行身份与权限:向 /var/log/ 写日志时,确保运行用户对日志目录具备写权限(如使用 systemd 的 User= 指定运行用户,或调整目录属主/权限)。
以上就是关于“CentOS Python日志如何查看分析”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm