大文件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 ...
随机推荐
- VIM 编辑器 -使用详解记录
1.什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但 ...
- perl-basic-分支&循环
if elsif shorter if: if+condition放在句子尾部. use strict; use warnings; my $word = "antidisestablish ...
- python之绝对导入和相对导入
绝对导入 import sys, os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_DIR) ...
- $(MAKE) , make命令
make 定义了很多默认变量,像常用的命令或者是命令选项之类的,什么CC啊,CFLAGS啊之类.$(MAKE)就是预设的 make 这个命令的名称(或者路径).make -p 可以查看所有预定义的变量 ...
- LeetCode(225) Implement Stack using Queues
题目 Implement the following operations of a stack using queues. push(x) – Push element x onto stack. ...
- SDUSToj第十一次作业源代码格式问题
Problem I: 源代码的格式 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1471 Solved: 634 [Submit][Status][W ...
- Linux学习-Tarball 的管理与建议
使用原始码管理软件所需要的基础软件 从原始码的说明我们晓得要制作一个 binary program 需要很多咚咚的呢!这包括底下这些基础的软件: gcc 或 cc 等 C 语言编译程序 (compil ...
- VR开发的烦恼——范围限制
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52230865 作者:car ...
- [文章备份]Powershell Studio 2019 5.6.160 X64破解版 Crack
- luogu1262 间谍网络
贿赂所有能贿赂的,如果还有人不被访问则显然是NO. 否则,必定为YES.强联通分量缩成一个DAG,若某点的入度为零,则答案要算上它的. #include <iostream> #inclu ...