当我们维护一个网站时,无论前台还是后台,经常会出现各种个样的问题。有时候问题很难直观的发现,这个时候只能查看各种日志来跟踪问题。但是查看日志有各种个样的问题。首先,要用各种工具登陆到服务器,这个有时候很麻烦。登录上去可能没有合适的工具查看日志,就算有,中文偶尔也会来个乱码啥的。最郁闷的是有的日志文件很大,打开要等很久,看起来也不方便。

基于上面的原因,我用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分页日志查看的更多相关文章

  1. Python 简易web日志查看工具&可改装为命令行工具

    Python 简易web日志查看工具&可改装为命令行工具 效果图 原理 利用python的paramiko库模拟ssh登录操作,并执行tail命令 所需库 flask.paramiko.gev ...

  2. python web 分页组件

    闲来无事便写了一个易使用,易移植的Python Web分页组件.使用的技术栈是Python.Django.Bootstrap. 既然是易使用.易移植的组件,首先介绍一下其在django框架中的调用方式 ...

  3. journalctl 日志查看方法

    1  概述 日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息.Systemd统一管理所有Unit的启动日志.带来的好处就是,可以只用jo ...

  4. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

  5. 在 Windows 上使用 Python 进行 web 开发

    本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一篇我们介绍了在Windows 10下进行初学者入门开发Python的指 ...

  6. Centos7 日志查看工具

    1  概述     日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息.Systemd统一管理所有Unit的启动日志.带来的好处就是,可以 ...

  7. 比我的脸还干的gan货——Python Flask Web 框架入门

    Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...

  8. Python之Web框架Django

    Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址  Python 下载地址:https://www.pyt ...

  9. 机器数据的价值 - Web 访问日志和数据库审计日志

    计算机数据 大量的数据流,不断增长的来源,蕴含着巨大的价值 在 Splunk,我们大量谈及计算机数据.这些数据是指在数据中心.“物联网”和互联设备世界中运行的所有系统产生的数据.其中包括支撑组织的应用 ...

随机推荐

  1. php小算法总结一(数组重排,进制转换)

    1.两个有序数组组合成一个新的有序数组 <?php $arr1=array(2,5,7,9,12); $arr2=array(3,4,6,8,10,11); function merge_sor ...

  2. WordPress 主题开发 - (六) 创建主题函数 待翻译

    We’ve got a file structure in place, now let’s start adding things to them! First, we’re going to ad ...

  3. js实现选项卡功能

    1.css .liclick{ border: 1px black solid; background: #fff; float: left; width: 80px; height: 35px; l ...

  4. 第五节:AppDomain FirstChance异常通知

    每个AppDomain都可关联一组回调方法:CLR开始查找AppDomain中的catch块时,这些回调方法就会得到调用.这些方法可执行日志记录操作.除此之外,宿主可利用这个机制监视AppDomain ...

  5. 第七节:使用实现了dispose模式的类型

    知道类型如何实现dispose模式之后,接下来看一下开发人员怎样使用提供了dispose模式的类型.这里不再讨论前面的SafeHandle类,而是讨论更常用的FileStream类. 可以利用File ...

  6. rspec的一些常见用法

    这里讲了如何安装rspec,安装使用rspec. 下面介绍一下rspec中常见的使用方法. 下面是一个最简单的测试用例,判断true是不是等于true,should_be是旧的用法,新用法推荐使用ex ...

  7. springMVC+jpa配置之简单案例

    搭建springMVC+jpa的亲身经历,看着网上的博客,自己摸索着搭建框架结果错误一大堆.现在把流程走一遍,方便以后查看. 其中我遇到这样的一个问题:直接启动tomcat运行保存实体能通过,但是通过 ...

  8. 小心指针被delete两次

    C++类中,有时候使用到传值调用(对象实体做参数),遇到这种情况,可要小心了!特别是当你所传值的对象生命周期较长,而非临时对象(生命周期段)的时候.来看看下面的情况: #include <ios ...

  9. Android系统编译脚本理解

    android源码编译步骤: 1. repo sync 代码(下载代码) 2.start branch(用哪个分支,git相关) 3. 到根目录(android目录) $cd android/ 4. ...

  10. 【转】VNC配置

    配置VNC服务参数文件 编辑vncservers文件追加如下 #vi /etc/sysconfig/vncsevers VNCSERVERS="1:root" VNCSERVERA ...