python实现web分页日志查看
当我们维护一个网站时,无论前台还是后台,经常会出现各种个样的问题。有时候问题很难直观的发现,这个时候只能查看各种日志来跟踪问题。但是查看日志有各种个样的问题。首先,要用各种工具登陆到服务器,这个有时候很麻烦。登录上去可能没有合适的工具查看日志,就算有,中文偶尔也会来个乱码啥的。最郁闷的是有的日志文件很大,打开要等很久,看起来也不方便。
基于上面的原因,我用python的bottle模块做了个web版的分页日志查看器,bottle怎么安装使用具体可看下面的指南:
http://bottlepy.org/docs/dev/tutorial.html
这里没有太多考虑安全因素,如果考虑安全最好加个简单的登录功能,或者直接对请求ip进行校验。性能方面还需要优化,文件太大还是有点慢。
下面是实现代码,只有一个文件:
#coding=utf-8
'''
日志文件查看器
Created on 2013年8月20日 @author: alala
''' import os
import bottle
from bottle import route, run, template #将自定义模板目录添加到模板搜索路径集合
templatesDir = os.getcwd()
bottle.TEMPLATE_PATH.insert(0,templatesDir) #日志根目录
LOG_DIR = "/Tem/"
#每页显示日志行数
PAGE_SIZE = 4000 #列出某个子目录的所有日志文件
@route('/')
@route('/<dirName>')
def listDir(dirName='logs'):
if dirName == 'favicon.ico':
return 0
#读取目录
files = os.listdir(LOG_DIR + dirName)
return template('logList', files=files,dirName=dirName) #查看某个日志文件
@route('/<dirName>/<logFile>')
@route('/<dirName>/<logFile>/<pageNo>')
def viewLog(dirName,logFile,pageNo=-1):
filePath = LOG_DIR + dirName + "/" + logFile;
pageNo = int(pageNo) #获取日志行数
lineCount = 0
f = open(filePath, 'rb')
try:
while True:
buf = f.read(1024*1024)
if not buf:
break
lineCount += buf.count('\n')
finally:
f.close()
#计算页数
pageCount = lineCount / PAGE_SIZE
if lineCount % PAGE_SIZE != 0:
pageCount += 1
#调整当前页码
print (pageNo, pageCount, pageNo >= pageCount)
if (pageNo < 0) or (pageNo >= pageCount) or (pageNo == -1):
pageNo = pageCount - 1 #读取当页日志
lines = []
f = open(filePath, 'r')
try:
maxNo = (pageNo + 1) * PAGE_SIZE
minNo = pageNo * PAGE_SIZE
lineNo = 0
for line in f:
if lineNo >= maxNo:
break
elif lineNo >= minNo:
lines.append(line)
lineNo += 1
finally:
f.close()
#使用模板构建显示页面
return template('logView', dirName = dirName, logFile = logFile,
pageNo = pageNo,lines = lines, pageCount = pageCount) run(host='localhost', port=5200)
#paste提供多线程请求处理,性能比默认的好
#run(host='localhost', port=5200,server='paste')
下面是使用到的两个模板:
%for f in files:
<a href="{{'/%s/%s' % (dirName, f)}}">{{f}}</a><br/>
%end
logList.tpl
%for i in range(0,pageCount):
<a href="{{'/%s/%s/%s' % (dirName, logFile, i)}}"
style="color:{{'red' if pageNo == i else 'black'}};">{{i}}</a>
%end
<br/>
<br/>
%for line in lines:
{{line}}<br/>
%end
logView.tpl
python实现web分页日志查看的更多相关文章
- Python 简易web日志查看工具&可改装为命令行工具
Python 简易web日志查看工具&可改装为命令行工具 效果图 原理 利用python的paramiko库模拟ssh登录操作,并执行tail命令 所需库 flask.paramiko.gev ...
- python web 分页组件
闲来无事便写了一个易使用,易移植的Python Web分页组件.使用的技术栈是Python.Django.Bootstrap. 既然是易使用.易移植的组件,首先介绍一下其在django框架中的调用方式 ...
- journalctl 日志查看方法
1 概述 日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息.Systemd统一管理所有Unit的启动日志.带来的好处就是,可以只用jo ...
- Python Flask Web 框架入门
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
- 在 Windows 上使用 Python 进行 web 开发
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一篇我们介绍了在Windows 10下进行初学者入门开发Python的指 ...
- Centos7 日志查看工具
1 概述 日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息.Systemd统一管理所有Unit的启动日志.带来的好处就是,可以 ...
- 比我的脸还干的gan货——Python Flask Web 框架入门
Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- 机器数据的价值 - Web 访问日志和数据库审计日志
计算机数据 大量的数据流,不断增长的来源,蕴含着巨大的价值 在 Splunk,我们大量谈及计算机数据.这些数据是指在数据中心.“物联网”和互联设备世界中运行的所有系统产生的数据.其中包括支撑组织的应用 ...
随机推荐
- 前端培训教程 jquery半透明设置
function setOpacity(eles){ $(eles).each(function(){ if($.browser.msie){ $(this).clone().empty().inse ...
- 设计师眼中功能强大的Xcode
作为设计师,不仅要能创造出移动为先的新产品,更要了解能创造出优秀移动作品的工具.这个实现过程可以让我们的设计更加优秀. 过去两个月,我每天在 Xcode 上花费的时间大约有 10 个小时,我学到了很多 ...
- js控制文本框只能输入数字 及 常用字符对应ASCII码值
方法一: <INPUT TYPE='text' NAME=text onkeypress="a()"><script language=javascript> ...
- 解决ubuntu15 下没有声音
个人经验,个人适用. 今天想在网上在线听一首歌,结果没有声音.好气啊,于是百度,google,发现好像这个问题很常见.于是按着来,什么alsamixer还有更改什么audio权限的,但在我这都没用. ...
- [转]浅谈Python web框架
说到web framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework.framework不可胜数,不完全列表见:http://wi ...
- java-testng-selenium优化
由于项目中webui测试的需要,是用testng+selenium的方式,其中遇到过几个问题,记录下,方便以后查看 1.重复运行多次case 因为是selenium,所以有的时候需要运行多次,方法是写 ...
- C++经典书籍推荐
<C++程序设计语言> <C++语言设计与演化> <C++标准程序库> <EFFECTIVE C++ 中文版> <MORE EFFECTIVE C ...
- TAT 前端突击队 第四关 题目 腐蚀的画
腐蚀的画 1.一个漂亮的画作在经过几千年岁月的洗礼下,部分地方已经被腐蚀了,像一个孤独的老人,满脸爬满了皱纹.2.但在一个晚上,老王突然发现,这些腐蚀的部分中,隐藏着岁月留下的密秘.请你帮助老王寻找这 ...
- html5 shiv
使用html5标签吧!ie6.ie7.ie8不支持怎么办?它的原理是如此的简单: 1.document.createElement("ele"); // js虚拟创建一个元 ...
- iOS学习之UITableView编辑
一.UITableView编辑 UITableView编辑(删除.添加)步骤: 让TableView处于编辑状态. 协议设定:1)确定Cell是否处于编辑状态:2)设定cell的编辑样式(删除.添加) ...