日誌分析代碼實現(正則表達式)
日誌分析代碼實現(正則表達式)
思路
使用正則表達式處理: 使用正則提取對應內容 每段數據轉換為對應格式 精簡代碼,異常處理,代碼效率檢查
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 "-" \
"Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)"‘‘‘
# 使用正則表達式的命名分組,可以直接根據分組名和對應匹配字段
def log_clean(line:str):
pattern = ‘‘‘(?P<remote>([\d\.]{7,})) - - \[(?P<time>[^\[\]]+)\] \"(?P<request>[^"]+)\" (?P<status>\d{3}) (?P<size>\d+) \"-\" \"(?P<useragent>[^"]+)\"\s?‘‘‘
regex = re.compile(pattern)
matcher = regex.fullmatch(line)
if matcher: # None時,異常處理
operations = {
‘time‘:lambda time: datetime.datetime.strptime(time, ‘%d/%b/%Y:%H:%M:%S %z‘),
‘request‘: lambda request: dict(zip((‘method‘,‘url‘,‘protocol‘),request.split())),
‘status‘: int,
‘size‘: int
print(log_clean(logline))
本文出自 “12064120” 博客,請務必保留此出處http://12074120.blog.51cto.com/12064120/1980428
日誌分析代碼實現(正則表達式)