这里有一个陷阱:
我只需要收集特定时间的所有日志,这些日志被解析为python文件的字符串参数,即'python main.py -t "Aug 6 12:30:45.123"
日志实际上有时间戳和相应的日志。例如:
Aug 6 12:30:45.123 abcdefghijklmnopqrstuvwxyz
诸若此类
从这个时候开始,捕获日志变得非常困难,直到脚本执行。
请注意:只能使用标准的Python库。
这就是我到目前为止所尝试的:
log_lines = ["Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K",
"Aug 7 11:00:00.000 abc xyz lol"] # we'll use a list as an example
for line in log_lines:
date_string = " ".join(line.split(None, 3)[:-1])
print(date_string)
提取日期和时间。
发布于 2018-08-15 06:59:33
看起来您在分隔时间戳字符串方面没有问题,但是您需要将其转换为time对象或类似对象,以便可以比较时间。
下面是一个简单的示例,它解析字符串以创建一个time对象,然后将其与开始日志时间进行比较:
import time
#example log
log_lines = ["Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K",
"Aug 8 11:00:00.000 abc xyz lol",
"Aug 3 11:00:00.000 def 3.14",
"Dec 4 11:00:00.000 ghi 1.62",
]
# process args (TODO use argparse)
start_time_arg = "Aug 6 12:30:45.123"
log_start = time.strptime(start_time_arg[:15], "%b %d %H:%M:%S")
for log in log_lines:
log_time = time.strptime(log[:15], "%b %d %H:%M:%S")
if log_time > log_start:
print(log)
这会产生以下结果:
Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K
Aug 8 11:00:00.000 abc xyz lol
Dec 4 11:00:00.000 ghi 1.62
有关详细信息,请参阅time.strptime()。我已经懒惰地对字符串进行了切片,假设时间戳在前15个字符中,您可能需要使用在分离时间字符串时所做的一些其他工作。
发布于 2018-08-14 17:17:29
尝试列表理解来过滤列表:
log_lines = ["Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K",
"Aug 7 11:00:00.000 abc xyz lol"]
arg = "Aug 7 11:00:00"
[line for line in log_lines if line.startswith(arg)]
输出:
['Aug 7 11:00:00 abc newsyslog[25714]: logfile turned over due to size>1024K', 'Aug 7 11:00:00.000 abc xyz lol']
https://stackoverflow.com/questions/51831939
复制相似问题