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

  • 思路

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

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)

转载于:https://blog.51cto.com/12074120/1980427

日志分析代码实现(字符串切割)相关推荐

  1. python字符串切割以及正则表达式的简单实例操作

    1.下面的log变量记录了云服务器上 当天上传的文件信息# 其中第一列是文件名,第二列是文件大小## 请编写一个程序,统计出不同类型的 文件的大小总和# 比如:# jpeg 9988999# json ...

  2. 用70行代码实现日志分析程序​

    python又一力作,感受python的强大.用70行代码实现日志分析程序 功能介绍:可直接对文本日至进行分组和排序功能,完了输出结果粘贴到excel里就可以直接生成图表,对于排查一些生产环境问题有很 ...

  3. c语言中strtok函数详解,手把手教你自主实现字符串切割函数,内附详细代码。

    函数功能简介: 对字符串str进行切割,切割的标志为字符指针q指向的这两个字符 "# *":. 但是在对这个函数进行调用时,只有在第一次调用时,才会将str这个字符串的首地址传递过 ...

  4. python 多线程日志切割+日志分析

    楼主最近刚刚接触python,还是个小菜鸟,没有学习python之前可以说楼主的shell已经算是可以了,但用shell很多东西实现起来还是不可能的事情,例如最明显的一点大日志分析,由于楼主的公司,每 ...

  5. python网站访问日志分析_python分析apache网站日志web日志的代码

    python分析apache网站日志的代码 1.分析日志的python框架awk.py 代码示例: # # Custom awk.py module # class controller: def _ ...

  6. php怎么把日志推送过去_实践 | 基于Flink的用户行为日志分析系统

    用户行为日志分析是实时数据处理很常见的一个应用场景,比如常见的PV.UV统计.本文将基于Flink从0到1构建一个用户行为日志分析系统,包括架构设计与代码实现.本文分享将完整呈现日志分析系统的数据处理 ...

  7. mysql+web日志分析工具_用Python+MySQL实现2017年web日志分析报告

    日志分析在web系统中故障排查.性能分析方面有着非常重要的作用.目前,开源的ELK系统是成熟且功能强大的选择.但是部署及学习成本亦然不低,这里我实现了一个方法上相对简单(但准确度和效率是有保证的)的实 ...

  8. Python老司机带你快速搞定日志分析工具

    标题说明一切,原文地址:jkklee/web_log_analyse,觉得文章不错请给原作者一个star哦~ 日志分析在web系统中故障排查.性能分析方面有着非常重要的作用.该工具的侧重点不是通常的P ...

  9. ELK 日志分析系统和部署

    目录 前言 一.日志分析 1.1  我们需要收集哪些日志 1.2  日志收集后,如何展示(可视化) 1.3   日志收集展示出来后,怎么使用 1.4  我们要怎么收集日志 二.ELK 日志分析系统简介 ...

最新文章

  1. 超级网管员原有QQ群己满,现增加新群
  2. php使用strstr函数 ,判断字符串A中是否含有字符串B
  3. node oracle linux 安装,Linux 下 nodejs 使用官方oracledb库连接数据库 教程
  4. java发送http请求的四种方式
  5. 如何在 ASP.Net Core 中使用 MiniProfiler
  6. 深入解析hostname
  7. 阿里云Kubernetes CSI实践—NAS动态存储卷使用
  8. 指尖的流连.9月13
  9. Oracle日志切换及频率跟踪脚本
  10. C语言实现 掷骰子游戏
  11. php判断支付宝,PHP怎样判断是否为支付宝客户端
  12. 使用虚拟机连接真实服务器,太一星晨:虚拟化和应用交付演绎珠联璧合
  13. 获取手机存储空间大小
  14. IP地址子网掩码的计算
  15. Python实现占用栅格地图的生成(Occupancy Grid Generation)
  16. python笔记更新(正则表达式)
  17. C#语言中的重要知识详细介绍
  18. 解密红杉资本加密局,一个女人选择 ALL IN
  19. 物体位姿估计精度验证实验(涉及位姿估计,手眼标定,机械臂运动)
  20. 微信小程序video组件/腾讯视频插件,禁止拖动进度条,使用遮罩层的方式实现

热门文章

  1. gVim 64位 Windows 7 安装过程 (使用spf13配置)
  2. 匹配objectuse rootsift= sqrt( sift / sum(sift) ) to improve object retrieval
  3. python simple example
  4. 第二十四章:页面导航(六) 1
  5. Springboot2.0从零开始搭建脚手架-初始化和整合MybatisPlus3.0+...
  6. JQGrid 在页面加载时展开SubGrid
  7. topic1:Qt入门之搭建环境与hello world看Qt开发框架
  8. 【原创】ObjectARX中的代理对象
  9. c# 如何读取和写入ini(配置文件)
  10. 关于计算机中 二进制位(bit)、字节(Byte)、 千字节(KB)等之间的关系