日志分析代码实现(字符串切割)

日志分析代码实现(字符串切割)

  • 思路

        不使用正则表达式处理:
            进行字符串切割
            将[]和"括起的内容特殊处理
            将每段数据转换为对应格式
            代码精简,代码效率检查

import datetime

# 目标日志
logline = ‘‘‘183.60.212.153 - - [19/Feb/2013:10:23:29 +0800] \
"GET /o2o/media.html?menu=3 HTTP/1.1" 200 16691 "-" \
"Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)"‘‘‘

clean_log = logline.split() 
# list
#[‘183.60.212.153‘, ‘-‘, ‘-‘, ‘[19/Feb/2013:10:23:29‘, ‘+0800]‘,\
# ‘"GET‘, ‘/o2o/media.html?menu=3‘, ‘HTTP/1.1"‘, ‘200‘, ‘16691‘, \
# ‘"-"‘, ‘"Mozilla/5.0‘, ‘(compatible;‘, ‘EasouSpider;‘, ‘+http://www.easou.com/search/spider.html)"‘]

# 转换时间格式
def convert_time(time:str):
    return datetime.datetime.strptime(time, ‘%d/%b/%Y:%H:%M:%S %z‘)

# 将request字符串切分为三段
def convert_request(request:str):
    return dict(zip((‘method‘,‘url‘,‘protocol‘),request.split()))

# 给予对应字段名
names = [
    ‘remote‘,‘‘,‘‘,‘time‘,
    ‘request‘,‘status‘,‘size‘,‘‘,
    ‘useragent‘
]

# 处理对应字段名的函数
operations = [
    None,None,None,convert_time,
    convert_request,int,int,None,
    None
]

# 切割字符串为合适格式
def log_clean(line:str,ret=None):
    if ret:
        ret = []
    tmp = ‘‘
    flag = False
    for word in line.split():
        if word.startswith(‘[‘) or word.startswith(‘"‘):
            tmp = word.strip(‘["‘)
            if word.endswith(‘"‘) or word.endswith(‘]‘):
                ret.append(tmp)
                flag = False
                continue
            flag = True
            continue

if flag:
            tmp += ‘ ‘ + word
            if word.endswith(‘"‘) or word.endswith(‘]‘):
                ret.append(tmp.strip(‘"]‘))
                flag = False
            continue
        else:
            ret.append(word)

# 遍历处理后日志,根据对应字段,进行对应处理后再保存至新字典中
ret_d = {}
log_clean(logline)
for i, field in enumerate(ret):
    key = names[i]
    if operations[i]:
        ret_d[key] = operations[i](field)
    else:
        ret_d[key] = field
print(ret_d)

时间: 2024-08-04 00:48:17

日志分析代码实现(字符串切割)的相关文章

日志分析代码实现(正则表达式)

日志分析代码实现(正则表达式) 思路     使用正则表达式处理:         使用正则提取对应内容         每段数据转换为对应格式         精简代码,异常处理,代码效率检查 import datetime import re logline = '''183.60.212.153 - - [19/Feb/2013:10:23:29 +0800] \"GET /o2o/media.html?menu=3 HTTP/1.1" 200 16691 "-&quo

mysql慢查询日志切割,日志分析

#!/usr/bin/env python #coding:utf8 import os,sys import datetime,shutil,subprocess from config.config import slow_config class cut_mysql(object): mysql_user,mysql_pass,date_day,slow_log_name,slow_log_path,mysqlsla_log_name,mysqldumpslow_log_name,new_

Python+MySQL实现web日志分析

(本文已不再同步更新,最新代码请见github)日志分析在web系统中故障排查.性能分析方面有着非常重要的作用.目前,开源的ELK系统是成熟且功能强大的选择.但是部署及学习成本亦然不低,这里我实现了一个方法上相对简单(但准确度和效率是有保证的)的实现.另外该脚本的侧重点不是通常的PV,UV等展示,而是短期内(如三天历史or一周历史)提供细粒度的异常和性能分析. 先说一下我想实现这个功能的驱动力(痛点)吧:我们有不少站点,前边有CDN,原站前面是F5,走到源站的访问总量日均PV约5000w.下面是

iOS崩溃日志分析-b

1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件. 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查看可执行文件或库文件的UUID.示例: dwarfdump --uuid 应用名称.app/应用名称 dwarfdump --uuid 应用名称.dSYM 1.3. symbolicatecrash 苹果提供的命令行工具,可以将crash日志符号化为可读的堆栈信息.XCode6/XCode7版本中,

iOS应用崩溃日志分析

转自raywenderlich 作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果你跟我一样是个完美主义者,你肯定想将应用做到尽善尽美.于是你打开代码准备修复闪退的问题……但是,从何处着手呢? 这时iOS崩溃日志派上用场了.在大多数情况下,你能从中了解到关于闪退的详尽.有用的信息. 通过本教程,你将学习到一些常见的崩溃日志案例,以及如何从开发设备和

iOS 应用崩溃日志分析

通过本教程,你将学习到一些常见的崩溃日志案例,以及如何从开发设备和iTunes Connect上获取崩溃日志文件.你还将学习到符号化( symbolication),从日志追踪到代码 .你还将学习调试一个在待定情况下会闪退的应用. 让我们开始动手吧! 什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上. 崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的完整堆栈跟踪信息,所以你能从中了解到闪退发生时

Python写WEB日志分析程序的一些思路

1.背景 刚到一家公司需要写一个实时分析tshark捕捉到的数据,tshark一直往文本里面写数据,写一个程序要实时获取到添加的数据并进行分析处理最后入库.此时思绪狂飞,想了一些比较挫的方法. 本人想到的方法: 1.每隔一定时间去查看下文件的mtime,如果有改动则读取数据,并记录读取的行数.下次再去读这个文件的数据则上次记录的行数开始继续读.当文件行数太大的时候这个程序的效率就很慢了,也可以记录上次读取的字节数,然后使用linux下的open系统系统中的seek从指定位置处读取.但是要是用C语

网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)

我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,来判断网站是否有性能问题,或者存在哪些需要改进的地方 对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情.有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的.还有些时候,我们希望不断地优化网站,让网站更快速的响应用户请求,这些事情都发生在开发之后的运维阶段. 与开发阶段不同的,运维阶段不可能让你去调试程序,发现各

Awk使用及网站日志分析

Awk使用及网站日志分析 Awk简介 概述 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk. awk程序的报告生成能力通常用来从大文本文件中提取数据元素并将它们格式化成可读的报告.最完美的例子是格式化日志文件.awk程序允许从日志文件中只过滤出你想要看