Python 日志处理(一) 按Nginx log_format 分割日志记录
要求:不使用正则
根据nginx 默认的日志记录格式,分割日志记录。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志记录先后顺序:
访客IP - 访客用户 请求时间 请求URL 状态码 响应字节大小 访问来源 浏览器标识 转发标识
单行日志:
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)"
本次只处理单行,单行处理可以了就可以应用于大文件日志分析。
每个字段特殊情况:
183.60.212.153 #不以" 或 [/] 开头结尾
[19/Feb/2013:10:23:29 +0800] #以 [ 开头 ] 结尾
"GET /o2o/media.html?menu=3 HTTP/1.1" #以 " 开头 " 结尾1
"-" #以 " 开头 " 结尾但只有一个字符
"Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)" #以 " 开头 " 结尾2
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)"''' fields = logline.split()
flag = False
tmp = ''
lst = [] for word in fields:
if not flag: # if flag == False
if word.startswith('[') or word.startswith('"'):
if word.endswith(']') or word.endswith('"'): # "-"
tmp = word.strip('[]"')
lst.append(tmp)
else: # '[19/Feb/2013:10:23:29',
tmp = word[1:]
flag = True
else:
lst.append(word)
continue
if flag: # '+0800]'
if word.endswith(']') or word.endswith('"'):
tmp += ' ' + word[:-1] # '19/Feb/2013:10:23:29 +0800'
lst.append(tmp)
tmp = ''
flag = False
else:
tmp += ' ' + word
print(lst)
输出结果:
['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)']
Python 日志处理(一) 按Nginx log_format 分割日志记录的更多相关文章
- apache 访问日志access_log 配置和解析 rotatelogs分割日志
一.解析访问日志 apache 的访问日志记载着大量的信息,学会高效快捷的读出其中关键信息对我们的工作有极大帮助. 如果Apache的安装方式是默认安装,服务器一运行就会有两 ...
- Nginx - Windows下nginx定时分割日志
1.建立批处理脚本,c:\soft\demo.bat @echo off taskkill /F /IM nginx.exe > nul cd C:\soft\nginx-1.11.3 rem ...
- python学习笔记(二十八)日志模块
我们在写程序的时候经常会打一些日志来帮助我们查找问题,这次学习一下logging模块,在python里面如何操作日志.介绍一下logging模块,logging模块就是python里面用来操作日志的模 ...
- 使用awstat分析Nginx的访问日志
在我的上一篇文章<使用 Nginx 提升网站访问速度>中介绍了 Nginx 这个 HTTP 服务器以及如何通过它来加速网站的访问速度.在实际的网站运营中,我们经常需要了解到网站的访问情况, ...
- 转 Nginx Access Log日志统计分析常用命令
Nginx Access Log日志统计分析常用命令Nginx Access Log日志统计分析常用命令IP相关统计 统计IP访问量 awk '{print $1}' access.log | sor ...
- 【nginx运维基础(4)】Nginx的日志管理(日志格式与定时分割日志)
Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(一般在server段来配置)中设置,两种日志都可以选择性关闭,默认都是打开的. 访问日志access_log #日志格式设 ...
- nginx变量(日志log_format)
nginx变量(日志log_format) HTTP请求变量 - arg_PARAMETER.http_HEADER.sent_http_HEADER 它是指http请求中的变量,举例: curl访问 ...
- 自动分割nginx服务的日志文件
nginx服务每天都会产生大量的日志信息,时间一长导致日志文件容量很大,会影响系统性能.通过以下shell代码,配合crontab定时执行可实现nginx日志定时分割的功能. #!/bin/bash ...
- nginx分割日志
实现nginx日志按照时间分割存储 backups_log.sh #设置log日志的存储地址 LOG_PATH=/home/soft/nginx/logs #设置历史日志的存储地址 HISTORY_L ...
随机推荐
- Oracle_11gR2_概念_第06章_数据字典和动态性能视图_英文词汇
decode 解码 be intend for 适应 distinguished 显著的,突出的 implied 隐含的 abbreviated 简短的 enabled roles 已 ...
- Pyhton编程(一)之第一个Pyhton程序
一:Python的第一个程序 Python在Windows系统和Linux系统下都可以安装,这里不过多说明安装过程,linux系统默认情况已经安装了Python2x的版本.注:目前使用的Python均 ...
- iOS 将视频流(h264)和音频流封装成PS流
调用方法: static CPSPackager * testObjc = NULL; static char *pszBuffer; testObjc = new CPSPackager(); p ...
- (@WhiteTaken)设计模式学习——享元模式
继续学习享元模式... 乍一看到享元的名字,一头雾水,学习了以后才觉得,这个名字确实比较适合这个模式. 享元,即共享对象的意思. 举个例子,如果制作一个五子棋的游戏,如果每次落子都实例化一个对象的话, ...
- 新型勒索软件Magniber正瞄准韩国、亚太地区开展攻击
近期,有国外研究人员发现了一种新型的勒索软件,并将其命名为Magniber,值得注意的是,这款勒索软只针对韩国及亚太地区的用户开展攻击.该勒索软件是基于Magnitude exploit kit(简称 ...
- 62、django之MTV模型(urls,view)
今天就进入到python最重要的阶段了django框架,框架就像胶水一样会将我们前面学的所有知识点粘合在一起,所以以前有哪些部分模糊的可以看看前面的随笔.本篇主要介绍djangoMTV模型,视图层之路 ...
- IT 圈里有哪些经常被读错的词?
原文链接:IT 圈里有哪些经常被读错的词? ()标相应英文单词[]标音标 =====公司/产品名===== Youtube (You-tube [tju:b]) 念 优tiu啵 不念 优吐毙Skype ...
- Excel 查找某列中的数据在另一列是否存在及输出第三例的数据
最近在操作Excel文件数据导入数据库时,经常需要检查Excel中哪些数据数据库中已经存在,哪些不存在,然后再将不存在数据库中的Excel数据导入:在此过程中,经常需要操作Excel中的数据,所以.也 ...
- request的getServletPath(),getContextPath(),getRequestURI(),getRealPath("/")区别
假定你的web application 名称为news,你在浏览器中输入请求路径: http://localhost:8080/news/main/list.jsp 则执行下面向行代码后打印出如下结果 ...
- this指向(匿名函数问题)
1.匿名函数中 this一般指向window对象 2.闭包函数中的this,指向window var mod = { init: function(){ console.log('this',this ...