Извлекать многострочные записи при чтении файла журнала - PullRequest
0 голосов
/ 07 мая 2020

Я использую Python 2.7.5 для чтения предупреждений из файла журнала и добавления его в список. Затем используйте этот список, чтобы отправить электронное письмо.

Проблема: Вывод, сгенерированный кодом, не содержит многострочного сообщения об ошибке. Он просто регистрируется до .[. Однако мне нужно регистрировать всю ошибку, чтобы ее можно было отправить по электронной почте. Ниже приведен фрагмент кода, файл журнала, вывод, сгенерированный кодом, и ожидаемый результат.

Python код:

import arcpy, os
recLogPath = "D:/something/log.txt"

conflictMsgList = []

with open(recLogPath) as logFile:
  for line in logFile:
    if "Warning:" in line:
        print(line)


print(conflictMsgList)

Файл журнала формат:

[06/05/2020 15:15:33] Reconciling version "SD\EL".Elliot_Menzies with sde.DEFAULT.

[06/05/2020 15:15:40] Warning: Conflicts found reconciling version "SD\EL".E_M.

[06/05/2020 15:15:40] 3 of 9 versions finished.

[06/05/2020 15:15:40] Reconciling version "SD\ME".K_M with sde.DEFAULT.

[06/05/2020 15:16:16] Warning: Error reconciling version "SD\ME".K_M.[
    The geometry corresponding to an edge element may not be zero length. [class = srw.SRW.ww_pipe, oid = 23]
    Field is not editable.
    Lock request conflicts with an established lock [Lock request conflicts with an established lock[
SR]]

Сгенерированный вывод:

[06/05/2020 13:36:36] Warning: Conflicts found reconciling version "SD\EL".E_M.

[06/05/2020 13:36:54] Warning: Error reconciling version "SD\ME".K_M.[

Ожидаемый результат, который мне нужен:

[06/05/2020 13:36:36] Warning: Conflicts found reconciling version "SD\EL".E_M.

[06/05/2020 15:16:16] Warning: Error reconciling version "SD\ME".K_M.[
    The geometry corresponding to an edge element may not be zero length. [class = srw.SRW.ww_pipe, oid = 23]
    Field is not editable.
    Lock request conflicts with an established lock [Lock request conflicts with an established lock[
SR]]

1 Ответ

1 голос
/ 07 мая 2020

Предполагается, что строки «внутреннего журнала» не начинаются с символа новой строки «[».

def get_logs(logfilename):
    with open(logfilename) as logFile:
        loglines = logFile.readlines()

    logs = []
    for line in loglines:
        if line.startswith('['):
            logs.append(line)
        else:
            logs[-1] += line
    return logs

logs = get_logs(recLogPath)
for log in logs:
    if 'Warning:' in log:
        print(log)
...