大文件LOG持续输出
作了两个版本,一是websocket输出,一是直接显示指定行数。
class WebSocketHandler(tornado.websocket.WebSocketHandler):
file_content = ""
filename = "test.log"
# 文件总大小,每次读取均更新长度
f_size = 0
# 每次读取的字节数,防止每次读得太多而卡死
f_chunk = 1024
# 文件读取指针位置
f_pos = 0
def check_origin(self, origin):
return True
def open(self):
pass
def update_client(self):
self.write_message(self._read_file(self.filename))
def on_message(self, message):
self.filename = '-'.join(message.split('-')[1:])
# 判断是否已存在LOG文件,如果没有,则先创建一个空文件内容
if os.path.exists("/tmp/" + self.filename):
self.update_client()
else:
with open("/tmp/" + self.filename, 'w') as f:
f.write("empty file.....\n")
def on_close(self):
pass
def _read_file(self, filename):
f = open("/tmp/"+filename, "r")
# seek里参数2是将指针放在末尾,检测文件长度
f.seek(0, 2)
self.f_size = f.tell()
# 指针复位
f.seek(self.f_pos, 0)
# 判断文件长度是否大过单次读取字节
if (self.f_size - self.f_pos) > self.f_chunk:
ret_str = f.read(self.f_chunk)
self.f_pos += self.f_chunk
return ret_str
else:
# 如果(最后)一次可读取所有字节,则文件指针指到末尾,这是考虑可能下次再读时有新数据
if self.f_size > self.f_pos:
ret_str = f.read(self.f_size - self.f_pos)
self.f_pos = self.f_size
return ret_str
elif self.f_size < self.f_pos:
return "reset"
else:
return ""
f.close()
'''
with open("/tmp/"+filename) as f:
content = f.read()
if len(content) >= len(self.file_content):
content_diff = content.replace(self.file_content, '')
self.file_content = content
return content_diff
else:
self.file_content = ""
return "reset"
'''
class IndexPageHandler(tornado.web.RequestHandler):
def get(self):
self.render("websockets.html")
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/ws_log/', IndexPageHandler),
(r'/websocket/ws', WebSocketHandler)
]
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
debug=True
)
tornado.web.Application.__init__(self, handlers, **settings)
if __name__ == '__main__':
ws_app = Application()
server = tornado.httpserver.HTTPServer(ws_app)
server.listen(9527)
tornado.ioloop.IOLoop.instance().start()
def sql_log(request):
dev_version = request.GET.get('dev_version')
log_line = int(request.GET.get('log_line'))
if platform.system() == "Windows":
log_file = 'd://tmp//' + dev_version
elif platform.system() == "Linux":
log_file = '/tmp/' + dev_version
else:
log_file = '/tmp/' + dev_version
with open(log_file) as f:
if log_line > 0:
sql_log_str = f.readlines()[0:log_line]
elif log_line < 0:
sql_log_str = f.readlines()[log_line:]
else:
sql_log_str = f.readlines()
return render(request, 'sar/sql_log.html', locals())
大文件LOG持续输出的更多相关文章
- FileOutputStream字节输出流和FileInputStream输入流(切记:out是输出到本地中,in是输入到程序中)这里介绍大文件和小文件的读取方式
//FileOutputStream public class FileOutputStreamDemo { /**字节流:适用于任何文件,以字节为单位,进行读写操作 *字节流操作步骤: *1.创 ...
- Linux大文件已删除,但df查看已使用的空间并未减少解决
在我的生活当中遇到磁盘快满了,这时候准备去删除一些大文件 于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,结果一看是elasticsearch的日志文件,好吧,竟然找到源头了,那就把 ...
- centos磁盘爆满,查找大文件并清理
今天发现vps敲入crontab -e 居然提示 “Disk quota exceeded” 无法编辑.于是"df -h"查了查发现系统磁盘空间使用100%了.最后定位到是/var ...
- Linux如何查找大文件或目录总结及在全部目录中查找
在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件 ...
- linux下磁盘占用达到100%了,找不到哪些大文件耗尽了磁盘
Linux下的根分区使用率100%,但是查看/分区下的目录都不大,没有占用满,这该怎么处理? 重启是肯定有效的,目前处理情况:重新restart应用后,空间释放出来 1.lsof | grep del ...
- Git从库中移除已删除大文件
写在前面大家一定遇到过在使用Git时,不小心将一个很大的文件添加到库中,即使删除,记录中还是保存了这个文件.以后不管是拷贝,还是push/pull都比较麻烦.今天在上传工程到github上,发现最大只 ...
- git 彻底删除历史记录中的大文件
Reference 大家一定遇到过在使用Git时,不小心将一个很大的文件添加到库中,即使删除,记录中还是保存了这个文件.以后不管是拷贝,还是push/pull都比较麻烦. === 删除大文件方法 方法 ...
- 【.Net】 大文件可使用的文本分组统计工具(附带源码,原创)
本工具可实现的效果: 1.读取大文件(大于1GB) 2.根据分隔符分割后的列分组 3.速度快. 4.处理过程中,可以随时停止处理,操作不卡死. 5.有对当前内存的实时监测,避免过多占用内存,影响系统运 ...
- tomcat相关配置技巧梳理 (修改站点目录、多项目部署、限制ip访问、大文件上传超时等)
tomcat常用架构:1)nginx+tomcat:即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx+tomcat的视频业务部署记录)2)to ...
随机推荐
- python爬虫: 豆瓣电影top250数据分析
转载博客 https://segmentfault.com/a/1190000005920679 根据自己的环境修改并配置mysql数据库 系统:Mac OS X 10.11 python 2.7 m ...
- 如何用纯 CSS 创作一副国际象棋
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/WyXrjz 可交互视频 ...
- day24 02 单继承(派生)
day24 02 单继承(派生) 1.首先来看一个简单的例子 比如: 狗类的属性有:吃,喝,看门 鸟类的属性有:吃,喝,下蛋 看门和下蛋就是这两种动物不同的属性,而吃喝是两个共同的属性 以下代码实现了 ...
- 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?
目录 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深? 简介 功能截图 如何运行 编写思路 main.py模块 qq_bot模块 tkinter_gui模块 static_data模 ...
- 用Python手把手教你搭建一个web框架-flask微框架!
在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文: 1.flask是 ...
- python解析库之 XPath
1. XPath (XML Path Language) XML路径语言 2. XPath 常用规则: nodename 选取此节点的所有子节点 / 从当前 ...
- CentOS 7 安装 配置 Nginx + PHP
. CentOS 7 下配置 yum 安装 Nginx. 进入/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vim ngi ...
- HDU - 1864 最大报销额 (背包)
题意: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元.现请你编 ...
- markdown快捷键
分组 功能 操作 快捷键 设置标题 一级标题 Heading1 Ctrl+1 二级标题 Heading2 Ctrl+2 三级标题 Heading3 Ctrl+3 四级标题 Heading4 Ctrl+ ...
- SPOJ 375 树链剖分 QTREE - Query on a tree
人生第一道树链剖分的题目,其实树链剖分并不是特别难. 思想就是把树剖成一些轻链和重链,轻链比较少可以直接修改,重链比较长,用线段树去维护. 貌似大家都是从这篇博客上学的. #include <c ...