Python怎么实时获取任务请求对应的Nginx日志
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"Python怎么实时获取任务请求对应的Nginx日志",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python怎么实时获取任务请求
千家信息网最后更新 2025年11月08日Python怎么实时获取任务请求对应的Nginx日志
这篇文章主要讲解了"Python怎么实时获取任务请求对应的Nginx日志",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python怎么实时获取任务请求对应的Nginx日志"吧!
需求描述
项目需求测试过程中,需要向Nginx服务器发送一些用例请求,然后查看对应的Nginx日志,判断是否存在特征内容,来判断任务是否执行成功。为了提升效率,需要将这一过程实现自动化。
实践环境
Python 3.6.5
代码设计与实现
#!/usr/bin/env python# -*- coding:utf-8 -*-"""@CreateTime: 2021/06/26 9:05@Author : shouke"""import timeimport threadingimport subprocessfrom collections import dequedef collect_nginx_log(): global nginx_log_queue global is_tasks_compete global task_status args = "tail -0f /usr/local/openresty/nginx/logs/access.log" while task_status != "req_log_got": with subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines = True) as proc: log_for_req = "" outs, errs = "", "" try: outs, errs = proc.communicate(timeout=2) except subprocess.TimeoutExpired: print("获取nginx日志超时,正在重试") proc.kill() try: outs, errs = proc.communicate(timeout=5) except subprocess.TimeoutExpired: print("获取nginx日志超时,再次超时,停止重试") break finally: for line in outs.split(""): flag = ""client_ip":"10.118.0.77"" # 特征 if flag in line: # 查找包含特征内容的日志 log_for_req += line if task_status == "req_finished": nginx_log_queue.append(log_for_req) task_status = "req_log_got"def run_tasks(task_list): """ 运行任务 :param task_list 任务列表 """ global nginx_log_queue global is_tasks_compete global task_status for task in task_list: thread = threading.Thread(target=collect_nginx_log, name="collect_nginx_log") thread.start() time.sleep(1) # 执行任务前,让收集日志线程先做好准备 print("正在执行任务:%s" % task.get("name")) # 执行Nginx任务请求 # ... task_status = "req_finished" time_to_wait = 0.1 while task_status != "req_log_got": # 请求触发的nginx日志收集未完成 time.sleep(time_to_wait) time_to_wait += 0.01 else:# 获取到用例请求触发的nginx日志 if nginx_log_queue: nginx_log = nginx_log_queue.popleft() task_status = "req_ready" # 解析日志 # do something here # ... else: print("存储请求日志的队列为空") # do something here # ...if __name__ == "__main__": nginx_log_queue = deque() is_tasks_compete = False # 所有任务是否执行完成 task_status = "req_ready" # req_ready,req_finished,req_log_got # 存放执行次任务任务的一些状态 print("###########################任务开始###########################") tast_list = [{"name":"test_task", "other":"..."}] run_tasks(tast_list) is_tasks_compete = True current_active_thread_num = len(threading.enumerate()) while current_active_thread_num != 1: time.sleep(2) current_active_thread_num = len(threading.enumerate()) print("###########################任务完成###########################")注意:
1、上述代码为啥不一步到位,直接 tail -0f /usr/local/openresty/nginx/logs/access.log | grep "特征内容"呢?这是因为这样做无法获取到Nginx的日志
2、实践时发现,第一次执行proc.communicate(timeout=2)获取日志时,总是无法获取,会超时,需要二次获取,并且timeout设置太小时(实践时尝试过设置为1秒),也会导致第二次执行时无法获取Nginx日志。
感谢各位的阅读,以上就是"Python怎么实时获取任务请求对应的Nginx日志"的内容了,经过本文的学习后,相信大家对Python怎么实时获取任务请求对应的Nginx日志这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
日志
任务
内容
实时
特征
实践
学习
代码
正在
过程
需求
成功
再次
小时
就是
思路
情况
效率
文章
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全宣传周活动总结讲话
2b2t国际服务器推荐
当前云计算与网络安全的关系
官方亚洲服务器
戴尔管理服务器价格
无法连接vivo服务器
新华三路由器软件开发
网络安全开放性
dw网站数据库制作
数据库事务日志记录在
国内工控网络安全标准
1路视频1路反向数据库
国际会议议论文全文数据库最早
嵌入式数据库支持网络存取吗
王者荣耀服务器未连接是什么意思
服务器 指纹
网络技术有哪些专业
java 服务器监控
广州计算机网络技术培训班
企业信息化管理专业软件开发
数据库中行和列的叙述
恒生互联网科技指数 雪球
网络技术lan
进口工业云实时历史数据库
猎豹媒体服务器已暂停
国外网络技术软件
合肥网络技术有限公司
庆余年手游各服务器开服时间
出门问问软件开发版
计算机网络技术的毕业论题