python统计日志小脚本
日志格式如下:
[ 2016-06-28T00:10:33-03:00 ] xxx.xx.xx.xxx /api/index/xxx/
ERR: code:400
message:
params:
country:us
token:uq6euz9dou6aqtk1
Python(3)脚本如下:
import urllib.request
import ntpath
import os, sys
import time
def dirList(path):
filelist = os.listdir(path)
fpath = os.getcwd()
allfile = []
for filename in filelist:
filepath = os.path.abspath(os.path.join(path, filename))
if os.path.isdir(filepath):
allfile.extend(dirList(filepath))
else:
if filepath.endswith(".log"):
allfile.append(filepath)
return allfile
def readlog(log):
ret = []
loginfo = {}
f = open(log)
line = f.readline()
while line != "":
if line.startswith("[ 201"):
if loginfo.get("time", "") != "":
if loginfo.get("params", "") != "":
loginfo["params"] = loginfo.get("params").rstrip(' ,')
if loginfo.get("code", "") != "":
ret.append(loginfo)
loginfo = {}
loginfo["time"] = line[2:21]
loginfo["ip"] = line[30:45].strip()
loginfo["url"] = line[45:].rstrip('\n')
elif line.startswith("ERR: code"):
loginfo["code"] = line[10:].rstrip('\n')
elif line.startswith("message"):
loginfo["message"] = line[8:].rstrip('\n')
elif line.startswith("params"):
loginfo["params"] = ""
elif line.startswith("ERR: fcmResult"):
loginfo["fcm"] = ""
elif line.startswith("ERR: Illegal"):
loginfo["code"] = '800'
loginfo["message"] = line[20:].rstrip('\n')
elif line.startswith("ERR: "):
loginfo["code"] = '900'
loginfo["message"] = line[4:].rstrip('\n')
elif line.startswith(" [ SQL"):
loginfo["sql"] = line.rstrip('\n')
else:
#print(line)
params = line.strip().rstrip('\n')
#print(log, params)
if params != "" and loginfo.get("params", "-1") != "-1":
loginfo["params"] += params + ", "
line = f.readline()
return ret
def ana_log(logdir):
logs = dirList(logdir)
logInfos = {}
for log in logs:
logInfos[log]=readlog(log)
return logInfos
def logSummary():
logdir = "/var/www/Runtime/Logs/Api"
logInfos = ana_log(logdir)
logCount = {}
for day in logInfos.keys():
#print(day)
logDay = {}
for logitem in logInfos.get(day):
#print(logitem)
#print("-------------------")
#break
if logDay.get(logitem["code"], -1) == -1:
logDay[logitem["code"]] = 1
else:
logDay[logitem["code"]] += 1
#print(logDay)
logCount[day] = logDay
return logCount
logInfo = logSummary()
for l in logInfo.keys():
print(l)
oneLog = logInfo.get(l)
oneLog = sorted(oneLog.items(), key=lambda d:d[1], reverse = True)
for k in oneLog:
print(str(k[0]) + ": " + str(k[1]))
输出结果如下:
/var/www/Runtime/Logs/Api/16_06_25.log
400: 22
110: 12
101: 10
119: 10
404: 2
600: 1
/var/www/Runtime/Logs/Api/16_06_26.log
110: 5
119: 4
600: 2
400: 1
/var/www/Runtime/Logs/Api/16_06_27.log
110: 42
400: 32
600: 14
119: 8
404: 1
/var/www/Runtime/Logs/Api/16_06_28.log
400: 5
110: 2
404: 2
119: 1
python统计日志小脚本的更多相关文章
- Python统计日志中每个IP出现次数
介绍了Python统计日志中每个IP出现次数的方法,实例分析了Python基于正则表达式解析日志文件的相关技巧,需要的朋友可以参考下 本脚本可用于多种日志类型 #-*- coding:utf-8 -* ...
- shell清除日志小脚本
#!/bin/bash #清除日志脚本 LOG_DIR=/var/log ROOT_UID=0 #用户id为0的 ,即为root if [ "$UID" -ne "$RO ...
- 使用python脚本实现统计日志文件中的ip访问次数
使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...
- 分享几个python小脚本
by 梁凯 今天我想给大家分享几个python脚本,分别是: 1.公司访问外网认证脚本(最初有同事写过,我优化了一下). 2.统计周报系统所有同事的最近一篇周报. 3.统计测试技术分享里指定一个月所有 ...
- python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】
前言:python统计apache.nginx访问日志IP访问次数并且排序(显示前20条).其实用awk+sort等命令可以实现,用awk数组也可以实现,这里只是用python尝试下. apach ...
- 分享一个刷网页PV的python小脚本
下面分享一个小脚本,用来刷网页PV. [root@huanqiu ~]# cat www.py #!/usr/bin/python# coding: UTF-8import webbrowser as ...
- python 小脚本升级-- 钉钉群聊天机器人
一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功 ...
- python xss相关的编码解码小脚本
1.功能分析: 实际工作中经常会遇到alert()之类的函数被防火墙过滤,而把alert()转化为ascii码放到String.fromCharCode()中就可以绕过,之前会一个一个查ascii表, ...
- python 统计时间,写日志
python 统计时间使用time模块,写日志使用logging模块,这两个都是标准模板. 测试socket使用socket模块 # 统计时间 ---------------------- impor ...
随机推荐
- CSU 1974
Description 对于csuxushu来说,能够在CSU(California State University)组织2017年的ACM暑期集训让他感到十分荣幸. csuxushu是一名充满梦想 ...
- HTML5标签应用
<!doctype html> <html> <head> <style> /* *{border:1px solid red;height:20px} ...
- plsql Developer11的工具栏没有了如何找回来
以前都是用的plsql developer7,最常用的工具类如下: 这次下载了12,发现风格变了,经常用的执行.提交.回滚按钮都在会话菜单下了 如何找回工具栏呢,如下操作:
- CentOS 7 安装oracle 11.2.0.4 Error in invoking target 'agent nmhs' of makefile
%86时出现报错 Error in invoking target 'agent nmhs' of makefile 解决方案在makefile中添加链接libnnz11库的参数修改$ORACLE ...
- 访问oracle数据库
如果是本地 :sqlplus system/xxx(用户名/密码) 远程到服务器, sqlplus system/xxx(用户名/密码) @IP:port/orcl(orcl为数据库实例)
- 【PTA 天梯赛】L2-1 分而治之(结构体存边)
分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题就请你编写程序,判断每个方案的可行性 ...
- 【PTA 天梯赛训练】词频统计(map+vector)
请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词. 所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符.而合 ...
- Python常用的数据类型
Python常用的数据类型有很多,今天暂时介绍这三种,int(整数类型).str(字符串).bool(布尔类型)一.int(整数类型)1.不带小数的,integer 的缩写,常用于数据的计算或者大小的 ...
- mysql like 变量
Mysql: select * from 表名 where 字段 like concat('%',变量,'%');
- flask之请求钩子
from flask import Flask from flask import abort app = Flask(__name__) # 在第一次请求之前调用,可以在此方法内部做一些初始化操作 ...