Я пытаюсь написать сценарий, чтобы упростить процесс поиска определенной информации в файлах журналов определенных приложений. Так что я подумал, может быть, есть способ преобразовать их в XML-дерево, и я начал с достойного начала... но проблема в том, что файлы журнала приложений представляют собой абсолютный беспорядок, если вы спросите меня.
Некоторые записи просты
2014/04/09 11:27:03 INFO Some.code.function - Doing stuff
В идеале я хотел бы превратить вышеизложенное во что-то вроде этого
<Message>
<Date>2014/04/09</Date>
<Time>11:48:38</Time>
<Type>INFO</Type>
<Source>Some.code.function</Source>
<Sub>Doing stuff</Sub>
</Message>
Другие записи примерно такие, где есть дополнительная информация и разрывы строк.
2014/04/09 11:27:04 INFO Some.code.function - Something happens
changes:
this stuff happened
Я хотел бы превратить этот последний фрагмент во что-то вроде приведенного выше, но добавить дополнительную информацию в раздел
<Message>
<Date>2014/04/09</Date>
<Time>11:48:38</Time>
<Type>INFO</Type>
<Source>Some.code.function</Source>
<Sub>Doing stuff</Sub>
<details>changes:
this stuff happened</details>
</Message>
а потом другие сообщения, ошибки будут в виде
2014/04/09 11:27:03 ERROR Some.code.function - Something didn't work right
Log Entry: LONGARSEDGUID
Error Code: E3145
Application: Name
Details:
message information etc etc and more line breaks, this part of the message may add up to an unknown number of lines before the next entry
Этот последний фрагмент я хотел бы преобразовать как последний из приведенных выше примеров, но добавив узлы XML для записи журнала, кода ошибки, приложения и снова, таких деталей, как так.
<Message>
<Date>2014/04/09</Date>
<Time>11:48:38</Time>
<Type>ERROR </Type>
<Source>Some.code.function</Source>
<Sub>Something didn't work right</Sub>
<Entry>LONGARSEDGUID</Entry>
<Code>E3145</Code>
<Application>Name</Application>
<details>message information etc etc and more line breaks, this part of the message may add up to an unknown number of lines before the next entry</details>
</Message>
Теперь я знаю, что Select-String имеет параметр контекста, который позволяет мне выбрать количество строк после отфильтрованной строки, проблема в том, что это не постоянное число.
Я думаю, что регулярное выражение также позволит мне выбрать фрагмент абзаца перед строкой даты, но регулярные выражения не являются моей сильной стороной, и я подумал, что может быть лучший способ, потому что одна константа заключается в том, что новые записи начинаются с строка даты
идея, однако, состоит в том, чтобы либо разбить их на xml или таблицы, а затем оттуда, я надеюсь, это может занять последнее или отфильтровать нерелевантные или повторяющиеся сообщения немного проще
У меня есть образец, который я только что бросил на pastebin после удаления/замены нескольких битов информации из соображений конфиденциальности.