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,我们大量谈及计算机数据.这些数据是指在数据中心.“物联网”和互联设备世界中运行的所有系统产生的数据.其中包括支撑组织的应用 ...
随机推荐
- 重拾C,一天一点点_12
连续两天没写了,今天继续! sizeof 对象 或 sizeof (类型名) 返回一个整型值,等于指定对象或类型占用的存储空间字节数.(返回值是无符号整型值,其类型为size_t,在头文件<st ...
- mybatis使用笔记
关于动态SQL里的条件查询(if test): 1.lombok插件和mybatis插件在有些变量名下会冲突,比如一个变量为rType的字段,lombok插件认为应该是getRType,但是mybat ...
- C++求平均数
题目内容:求若干个证书的平均数. 输入描述:输入数据含有不多于5组的数据,每组数据由一个整数n(n<=50)打头,表示后面跟着n个整数. 输出描述:对于每组数据,输出其平均数,精确到小数点后3位 ...
- Python学习教程(learning Python)--1.3 Python数据输入
多数应用程序都有数据输入语句,用于读入数据,和用户进行交互,在Python语言里,可以通过raw_input函数实现数据的从键盘读入数据操作. 基本语法结构:raw_input(prompt) 通常p ...
- Red Gate Software 软件推荐
这家公司的Wiki http://en.wikipedia.org/wiki/Redgate http://www.red-gate.com/products/ 好吧 就介绍点免费的 Find SQL ...
- GNU make 规则
clean : rm *.tmp 规则格式: targets : prerequisites recipe ... targets : prerequisites : recipe recipe .. ...
- 同时执行2个存储过程,2个SP中分别有相同的临时表名,会有冲突吗?
同时执行2个存储过程,2个SP中分别有相同的临时表名,会有冲突吗?答案:不会 这就可以在以后写存储过程的时候统一临时表名了. alter procedure sp_01 as begin create ...
- Linux 删除文件后空间不释放磁盘空间
在Linux操作系统下,有个没用的文件占用了400G,于是删除掉. [root@yoon log]# rm -rf messages [root@yoon log]# df -hFilesystem ...
- 如何从官网下载springframework和document
spring官网 http://spring.io/ --->spring project--->点击github图标 --->artifactory --->进入到了http ...
- 在JAVA中使用JSONObject生成json
JSON是一种轻量级的数据交换格式,在现在的web开发中,是非常常见的.在没有方便的工具之前,我们或许会使用拼字符串的形式来生成json数组,今天我们使用一个json-lib.jar包来为我们实现生成 ...