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

基于上面的原因,我用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. 配置visual studio code进行asp.net core rc2的开发(转载jeffreywu)

    1.安装.net core sdk https://github.com/dotnet/cli#installers-and-binaries,根据你的系统选择下载 2.下载vscode的C#扩展插件 ...

  2. 决策树的基本ID3算法

    一  ID3算法的大致思想 基本的ID3算法是通过自顶向下构造决策树来进行学习的.我们首先思考的是树的构造从哪里开始,这就涉及到选择属性进行树的构造了,那么怎样选择属性呢?为了解决这个问题,我们使用统 ...

  3. tomcat datasource

    <Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource&qu ...

  4. C#中Image , Bitmap 和 BitmapData

    先说Image,Image 就是个图像,不能实例化,提供了位图和源文件操作的函数.本篇文章他就是来打酱油的,这里提供一个Bitmap转成BitmapSource的方法. [DllImport(&quo ...

  5. C 简单处理excel 转成 json

    引言 工作中常需要处理excel转json问题. 希望这篇博文能简单描述这个问题.并提供一种解决思路.提升感悟. 今天我们处理的事就是为了把 xlsm => json. 一种方式是. 去 goo ...

  6. kettle发送邮件

    使用kettle发送邮件是为了更好的监控ETL的加载信息 以下是我通过测试的一个案例 1. JOB示意图 2.邮件发送配置详细信息 2.1地址信息配置 2.2 服务器信息配置 上图中所说的" ...

  7. “猜你喜欢”是怎么猜中你心思的?

    文/Joseph A. Konstan & John Riedl)如今,到网上购物的人已经习惯了收到系统为他们做出的个性化推荐.Netflix 会推荐你可能会喜欢看的视频.TiVo 会自动把节 ...

  8. Qt的QTabelWidget

    QTableWidget的用法总结  http://blog.csdn.net/zb872676223/article/details/39959061 [Qt]在QTableWidget中添加QCh ...

  9. C++实现禁忌搜索解决TSP问题

    C++实现禁忌搜索解决TSP问题 使用的搜索方法是Tabu Search(禁忌搜索) 程序设计 1) 文件读入坐标点计算距离矩阵/读入距离矩阵 for(int i = 0; i < CityNu ...

  10. Json.Net使用JSON Schema验证JSON格式

    Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...