使用 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'