我要忽略“未找到:/ api”,并在输入的最后n秒内返回所有GET和POST调用
以下是我的日志文件的外观:
Not Found: /api
[22/Aug/2018 10:07:14] "GET /api HTTP/1.1" 404 2318
Not Found: /api
[22/Aug/2018 10:30:30] "GET /api HTTP/1.1" 404 2318
Not Found: /api
[22/Aug/2018 10:30:33] "GET /api HTTP/1.1" 404 2318
[22/Aug/2018 10:37:08] "POST /api/entity/ HTTP/1.1" 201 83
[22/Aug/2018 10:37:40] "GET /api/entity/ HTTP/1.1" 200 412
[22/Aug/2018 10:37:41] "POST /api/datasets/ HTTP/1.1" 201 115
答案 0 :(得分:0)
如果您使用的是尾巴:
tail somelog.log | grep -E 'GET|POST'
您也许还可以使用egrep:
tail somelog.log | egrep 'GET|POST'
您还可以cat
日志文件并通过管道传递相同的egrep
或grep -E
命令。
答案 1 :(得分:0)
编辑:
由于日志文件中有几行多余的行,不仅是“未找到...”,我还假设所有有效行都以方括号开头,例如上面的日期行。
首先,我将所有有效的行读入列表:
log = []
with open ('/wherever/file/may/roam/logfile.log', 'r') as logfile:
for row in logfile.readlines():
if row[0] == '[':
log.append(row)
使用StringIO
模块中的io
,您可以将其输入到熊猫的数据帧创建中:
from io import StringIO
df = pd.read_fwf(StringIO(''.join(log)), colspecs=[(1, 21), (23, None)], header=None)
您可以在这样的数据框中使用 pandas
读取此日志文件
将熊猫作为pd导入
df = pd.read_fwf('/ whereever / file / may / roam / logfile.log',colspecs = [(1,21),(23,None)],comment ='o',header = None)
在这里我使用“读取固定宽度的文件”,因为开始时的长度是等长的。我已经通过读取(colspecs)上的第二个字符来切掉括号,因此要通过comment关键字跳过的行的信号字符是'Not'的'o'。称它为滥用,但在这里效果很好。那么 header=None
是因为您的文件没有第一行的列描述符。
结果是此数据框:
df
0 1
0 22/Aug/2018 10:07:14 "GET /api HTTP/1.1" 404 2318
1 22/Aug/2018 10:30:30 "GET /api HTTP/1.1" 404 2318
2 22/Aug/2018 10:30:33 "GET /api HTTP/1.1" 404 2318
3 22/Aug/2018 10:37:08 "POST /api/entity/ HTTP/1.1" 201 83
4 22/Aug/2018 10:37:40 "GET /api/entity/ HTTP/1.1" 200 412
5 22/Aug/2018 10:37:41 "POST /api/datasets/ HTTP/1.1" 201 115
使用
df[0] = pd.to_datetime(df[0])
我们将字符串类型的日期转换为可用于计算的日期时间格式。
然后,我们需要一个函数来从最后一个条目算起n秒:
thrshld = lambda n: df[0].values[-1] - n*10**9
df [0]中的datetime值为numpy.datetime64类型,其分辨率为纳秒,因此系数为10 ** 9。
现在您可以像索引数据框一样
df[df[0]>thrshld(5)]
Out:
0 1
4 2018-08-22 10:37:40 "GET /api/entity/ HTTP/1.1" 200 412
5 2018-08-22 10:37:41 "POST /api/datasets/ HTTP/1.1" 201 115
df[df[0]>thrshld(60)]
Out:
0 1
3 2018-08-22 10:37:08 "POST /api/entity/ HTTP/1.1" 201 83
4 2018-08-22 10:37:40 "GET /api/entity/ HTTP/1.1" 200 412
5 2018-08-22 10:37:41 "POST /api/datasets/ HTTP/1.1" 201 115