使用 Python 通过日志搜索字符串 3.8
Searching strings through log with Python 3.8
我正在制作某种脚本,它会从日志文件中提取 return 行。打印出不符合请求条件的行时出现问题。
留下日志文件的例子:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
2021-05-14 05:23:11,140 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueB</identifier><object>Data</object>
2021-05-14 05:23:11,431 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueB</identifier><object>Data</object>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '1234xz987'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '1234xz987'
所以基本的想法是用 ID_valueA 获取行,但我还需要与 ID_valueA 连接的所有其他数据块。所以预期的结果是:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'
目前我已经取得了结果:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'
**
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
**
^
MISSING
我使用了以下代码:
from file_manager import open_log_file
request_id = re.compile(r"requestID=\"[0-9a-zA-Z:-]+\"")
list_of_input_values = []
list_of_output_values = []
filename = []
id_list= []
case1="typeofRequest1"
case2="typeofResponse1"
case3="typeofRequest2"
case4="typeofResponse2"
case5="typeofRequest3"
case6="typeofResponse3"
status = True
while status == True:
used = input('>>> ')
if used.lower() == 'stop':
break
if used.lower() == 'ID_parameter1':
ID_parameter1 = input('Please input ID_parameter1: ')
list_of_input_values.insert(0,ID_parameter1)
continue
if used.lower() == 'ID_parameter2':
ID_parameter2 = input('Please input ID_parameter2: ')
list_of_input_values.insert(1,ID_parameter2)
continue
if used.lower() == 'ID_parameter3':
ID_parameter3 = input('Please input ID_parameter3: ')
list_of_input_values.insert(2,ID_parameter3)
continue
if used.lower() == '':
continue
if used.lower() == 'open':
filename = open_log_file()
for element in filename:
with open(element) as log:
for line in log:
for val in list_of_input_values:
if val in line:
result = request_id.findall(line)
for i in result:
id_list.append(i)
for element in filename:
with open(element) as log:
for line in log:
for i in id_list:
if i in line:
list_of_output_values.append(line)
for line in log:
if i in line:
list_of_output_values.append(line)
else:
if line.__contains__(case1 or case2 or case3 or case4 or case5 or case6 or case7 or case8):
break
else:
list_of_output_values.append(line)
print(list_of_output_values, file=open(r'output\output.txt', "a"))
从 file_manager 导入 open_log_file :
def open_log_file():
import tkinter as tk
from tkinter import filedialog
import fileinput
unused_value = ">>> Unexpected input value: None. "
root = tk.Tk()
root.withdraw()
root.attributes('-topmost', True)
root.update()
root.wm_iconbitmap(r'resources\myicon.ico')
filename = filedialog.askopenfilename(multiple=True)
filename = root.tk.splitlist(filename)
filePath = []
for f in filename:
filePath.append(f)
if filename == ():
print(unused_value)
return filePath
请您环顾四周,了解问题所在。我期待电流环能正常工作,但似乎效果不佳。搜索基于请求 ID 参数,因为并非每一行都包含 ID_value 个特定参数。谢谢指教。
各位早安。
无法解释为什么,也许在查看解决方案后有人会给出一些决定。
我用过:
print(list_of_output_values, file=open(r'output\output.txt', "a"))
代码结束。这给了我以下输出:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'
现在向下滚动代码,我决定将 print() 函数更改为 write() 块以获得更清晰的输出。并使用:
with open(r'output\output.txt', "a") as file:
for i in list_of_output_values:
file.write(i)
现在我得到:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'
我正在制作某种脚本,它会从日志文件中提取 return 行。打印出不符合请求条件的行时出现问题。
留下日志文件的例子:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
2021-05-14 05:23:11,140 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueB</identifier><object>Data</object>
2021-05-14 05:23:11,431 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueB</identifier><object>Data</object>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '1234xz987'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '1234xz987'
所以基本的想法是用 ID_valueA 获取行,但我还需要与 ID_valueA 连接的所有其他数据块。所以预期的结果是:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'
目前我已经取得了结果:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'
**
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
**
^
MISSING
我使用了以下代码:
from file_manager import open_log_file
request_id = re.compile(r"requestID=\"[0-9a-zA-Z:-]+\"")
list_of_input_values = []
list_of_output_values = []
filename = []
id_list= []
case1="typeofRequest1"
case2="typeofResponse1"
case3="typeofRequest2"
case4="typeofResponse2"
case5="typeofRequest3"
case6="typeofResponse3"
status = True
while status == True:
used = input('>>> ')
if used.lower() == 'stop':
break
if used.lower() == 'ID_parameter1':
ID_parameter1 = input('Please input ID_parameter1: ')
list_of_input_values.insert(0,ID_parameter1)
continue
if used.lower() == 'ID_parameter2':
ID_parameter2 = input('Please input ID_parameter2: ')
list_of_input_values.insert(1,ID_parameter2)
continue
if used.lower() == 'ID_parameter3':
ID_parameter3 = input('Please input ID_parameter3: ')
list_of_input_values.insert(2,ID_parameter3)
continue
if used.lower() == '':
continue
if used.lower() == 'open':
filename = open_log_file()
for element in filename:
with open(element) as log:
for line in log:
for val in list_of_input_values:
if val in line:
result = request_id.findall(line)
for i in result:
id_list.append(i)
for element in filename:
with open(element) as log:
for line in log:
for i in id_list:
if i in line:
list_of_output_values.append(line)
for line in log:
if i in line:
list_of_output_values.append(line)
else:
if line.__contains__(case1 or case2 or case3 or case4 or case5 or case6 or case7 or case8):
break
else:
list_of_output_values.append(line)
print(list_of_output_values, file=open(r'output\output.txt', "a"))
从 file_manager 导入 open_log_file :
def open_log_file():
import tkinter as tk
from tkinter import filedialog
import fileinput
unused_value = ">>> Unexpected input value: None. "
root = tk.Tk()
root.withdraw()
root.attributes('-topmost', True)
root.update()
root.wm_iconbitmap(r'resources\myicon.ico')
filename = filedialog.askopenfilename(multiple=True)
filename = root.tk.splitlist(filename)
filePath = []
for f in filename:
filePath.append(f)
if filename == ():
print(unused_value)
return filePath
请您环顾四周,了解问题所在。我期待电流环能正常工作,但似乎效果不佳。搜索基于请求 ID 参数,因为并非每一行都包含 ID_value 个特定参数。谢谢指教。
各位早安。
无法解释为什么,也许在查看解决方案后有人会给出一些决定。 我用过:
print(list_of_output_values, file=open(r'output\output.txt', "a"))
代码结束。这给了我以下输出:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'
现在向下滚动代码,我决定将 print() 函数更改为 write() 块以获得更清晰的输出。并使用:
with open(r'output\output.txt', "a") as file:
for i in list_of_output_values:
file.write(i)
现在我得到:
2021-05-14 04:16:22,164 instanceA 10.0.0.1 <request>requestID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:22,215 instanceA 10.0.0.1 <response>responseID = '1234xz987'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,311 instanceA 10.0.0.1 <request>requestID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:16:23,312 instanceA 10.0.0.1 <response>responseID = 'abcd672'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,620 instanceA 10.0.0.1 <request>requestID = 'r#qwsrdq'<identifier>ID_valueA</identifier><object>Data</object>
2021-05-14 04:17:24,750 instanceA 10.0.0.1 <response>responseID = 'r#qwsrdq'<identifier>ID_valueA</identifier><objectError>Error_Data</objectError>
&QADQ;requestID = &Qot;'r#qwsrdq'/version=.../object=.../...
END OF QUERY <response><info><error></error></info></response>
2021-05-14 06:34:12,266 instanceA - WEB_GUI 10.0.0.1 <request>requestID = '12355557'
<identifier>ID_valueA</identifier>
<object>Data</object>
<object>Data</object>
<object>Data</object>
<value>Data</value>
2021-05-14 06:34:12,315 instanceA - WEB_GUI 10.0.0.1 <response>responseID = '12355557'