|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
Парсинг лога11.01.2018, 12:45. Показов 8407. Ответов 37
Метки нет (Все метки)
Доброго времени суток! Прошу помощи профессионалов. Нужен скрипт который распарсит лог:
1) Берём название файла который лежит в папке $filename = (Get-ChildItem -Path C:\badmassenges).Name 2) Обходим каждую папку в C:\test\* в которой находится лог, название которого текущая дата в формате yyy-MM-dd $date = get-date -Format yyyy-MM-dd (в каждой папке находится лог с именем текущей даты) "C:\test\*\$date.log" 3) по названию файла, который будет лежать в C:\badmassenges\telegramma.txt , находим в логе, например который будет лежать в C:\test\trace\2018-01-11.log, строчку: 11.01.2018 08:42:57.069 ERROR Файл 'C:\test\trace\telegramma.txt' не будет обработан, так как его размер превышает 19456000 байт. которая будет содержать error и название файла и выкусывать из неё полный путь, например C:\test\trace\telegramma.txt Пример лога: 11.01.2018 08:42:56.662 INFO Ресурс назначения доступен 11.01.2018 08:42:56.662 INFO Считываю сообщения 11.01.2018 08:42:56.678 INFO [Файловая система] Поиск файлов в каталоге 'C:\test\trace\' 11.01.2018 08:42:56.678 INFO [Файловая система] Найден файл 'C:\test\trace\telegramma.txt' 11.01.2018 08:42:56.678 INFO [Файловая система] Доступно для считывания 1 сообщений. 11.01.2018 08:42:56.897 WARN [Файловая система] Файл C:\test\trace\telegramma.txt содержится в списке игнорируемых сообщений и не будет обработан 11.01.2018 08:42:56.897 INFO [Файловая система] Считано 1 сообщений. 11.01.2018 08:42:57.069 WARN Найдены сообщения, вызывающие ошибку во время обработки 11.01.2018 08:42:57.069 ERROR Описания ошибок: 11.01.2018 08:42:57.069 ERROR Файл 'C:\test\trace\telegramma.txt' не будет обработан, так как его размер превышает 19456000 байт. 11.01.2018 08:42:57.115 ERROR Сообщение 'telegramma.txt' перенесено в директорию для ошибочных сообщений С:\badMessages 11.01.2018 08:42:57.990 INFO Откатываю транзакцию 11.01.2018 08:42:57.990 INFO [Файловая система] Откат транзакции 11.01.2018 08:42:57.990 INFO [Файловая система] Начинаю удаление файла 'C:\test\trace\telegramma.txt' 11.01.2018 08:42:57.990 INFO [Файловая система] Убираю атрибуты файла 11.01.2018 08:42:57.990 INFO [Файловая система] Удаляю файл 11.01.2018 08:43:03.053 INFO Начинаю транзакцию
0
|
|
| 11.01.2018, 12:45 | |
|
Ответы с готовыми решениями:
37
Парсинг лога
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
||||||||
| 12.01.2018, 13:36 | ||||||||
|
Итого, с учётом новых условий:
Не по теме:
1
|
||||||||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 12.01.2018, 13:49 [ТС] | |
|
Спасибо, в понедельник на работе попробую. Кстати, по части скорости выполнения, только сейчас подумал, а вот если брать лог но не весь его читать, а только последние 50 или 100 строчек к примеру, так возможно вообще? Потому что скрипт скрипт будет срабатывать когда файл будет перемещён в badmassenges, а запись в логе появится как раз в этом интервале.
0
|
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|||||||
| 12.01.2018, 14:03 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
||
| 12.01.2018, 16:28 [ТС] | ||
|
Проверил, ну быстрее не стал работать скрипт, моё предположение оказалось ошибочно)))
Добавлено через 49 минут Добавлено через 1 час 26 минут Блин, засада, а может быть и такая ситуация: в разных логах (имеется ввиду логи в разных папках C:\test\*) может фигурировать файл с одинаковым названием, KDE777, можно сделать тогда так - опираясь на время в логе, сортируем и выбираем строку по наибольшему времени? Т.е. если мы получаем массив строк с одинаковым названием файла, то сортируем по времени, которое есть в логе, по возрастанию и берём первую строку и записываем в переменную $result
0
|
||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 15.01.2018, 07:48 [ТС] | |
|
KDE777, доброго Вам дня. Проверил скрипт, всё работает замечательно! Спасибо Вам огромное!
Если Вам несложно, можно его поправить, чтобы на случай если в логах будут строчки с одинаковым названием файла, т.е. скрипт выберет все строчки из логов 11.01.2018 08:42:57.070 ERROR Файл 'C:\test\trace1\telegramma.txt' не будет обработан, так как его размер превышает 19456000 байт. 11.01.2018 09:55:10.069 ERROR Файл 'C:\test\trace\telegramma.txt' не будет обработан, так как его размер превышает 19456000 байт. 11.01.2018 07:00:05.863 ERROR Файл 'C:\test\trace3\telegramma.txt' не будет обработан, так как его размер превышает 19456000 байт. Далее сортируем строки по возрастанию времени и выбираем только одну: 11.01.2018 09:55:10.069 ERROR Файл 'C:\test\trace\telegramma.txt' не будет обработан, так как его размер превышает 19456000 байт.
0
|
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
||||||||
| 15.01.2018, 13:35 | ||||||||
|
Это называется не поправить, а сделать заново (причём уже несколько раз). Создавая в следующий раз тему, постарайтесь сначала подумать, что же вам действительно нужно.
0
|
||||||||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 15.01.2018, 14:14 [ТС] | |
|
Да, всё супер! Только не могу понять как мне записать в этом скрипте в переменную $psth = C:\test\trace3\telegramma.txt
В предыдущем скрипте было понятно $result = [Regex]::Matches($text,$Pattern) $psth = $result | %{$_.Groups[2].Value} | select -Unique А здесь как? Добавлено через 13 минут Просто мне нужно записать два переменные $path - C:\test\trace\telegramma.txt $messages - Файл 'C:\test\trace\telegramma.txt' не будет обработан, так как его размер превышает 19456000 байт.
0
|
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|||||||
| 15.01.2018, 14:32 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 15.01.2018, 15:21 [ТС] | |
|
$filenames = (ls -Path C:\badmassenges).Name
$messages = @() $obj = @{} foreach ($log in ls C:\test\* -inc "$(Get-Date -Format yyyy-MM-dd).log" -rec) { $text = gc $log -enc Default -Raw foreach ($name in $filenames) { $Pattern = ".+ERROR\ Файл\ '(.+\\$([regex]::Escape($name)))'.+" foreach ($result in [Regex]::Matches($text,$Pattern) | select @{N='Value';E={$_.Value.Split(' ',4)}},@{N='Path';E={$_.Groups[1].Value}}) { $obj.Date = Get-Date "$($result.Value[0]) $($result.Value[1])" $obj.Msg = $result.Value[-1] $Path = $result.Path $messages += New-Object -TypeName PSObject –Prop $obj $message = $messages | sort Date | select -exp Msg -Last 1 } } } $Path $message Получается скрипт в переменную $message записывает последнюю и отсортированную по времени строчку в в переменную $Path записывает путь из последней стоки в логе, где встречается название файла. Можете сделать чтобы путь соответствовал стоке записанной в $message. Это последнее.
0
|
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|||||||
| 15.01.2018, 15:36 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 16.01.2018, 12:11 [ТС] | |
|
KDE777, спасибо Вам за помощь!
0
|
|
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 29.01.2018, 12:33 [ТС] | |
|
KDE777, доброго дня! Помогите пожалуйста. Если всё таки есть необходимость в строчке
$text = gc $log -enc Default -Raw проставить параметр со значением -Tail 50. Возникает ошибка gc : Параметры "Raw" и "Tail" не могут быть указаны в одной команде. строка:7 знак:13 + $text = gc $log -enc Default -Raw -Tail 50 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: ( [Get-Content], PSInvalidOperationException+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Co mmands.GetContentCommand А заменить -Raw на -Tail тоже нельзя потому что ломается логика и в переменную $path путь к файлу уже нормально не пишется Добавлено через 59 минут Хотелось бы всё таки чтобы побыстрее скрипт работал, поэтому хотел через -Tail 50 (((
0
|
|
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 31.01.2018, 11:43 [ТС] | |
|
Или придётся полностью переписывать скрипт?(((
0
|
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|||||||
| 31.01.2018, 13:49 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 31.01.2018, 14:29 [ТС] | |
|
Вот такие ошибки при выполнении
0
|
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
||
| 31.01.2018, 15:00 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288
|
|
| 01.02.2018, 10:56 [ТС] | |
|
Супер!!! KDE777, вы Бог PS.
Только сегодня когда тестировал, выяснил такую проблему. Кривой софт, который перекладывает файлы, длина которых превышает 95 символов, в папку C:\badmassenges перемещает такие файлы без расширения, а в лог пишет как положено с расширением, и перенастроить софт невозможно. Пример лога: 01.02.2018 10:48:05.156 ERROR Длина имени файла 'C:\test\trace\Аaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt' превышает 95 символов. Возможно ли сделать так, чтобы плюс к тому рабочему скрипту добавить Если будет файл без расширения в папке C:\badmassenges, его имя будет превышать 95 символов, то по аналогии с рабочим скриптом делалось тоже самое "Все найденные строки:" $messages "`nСамая новая из найденных строк:" $messages | sort Date | select -Last 1 | fl т.е. в переменную path должно записаться 'C:\test\trace\Аaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt' Добавлено через 3 часа 11 минут KDE777, можете помочь? Это последний вопрос.
0
|
|
|
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
|
|||||||
| 01.02.2018, 13:06 | |||||||
Поэтому, в очередной раз вспоминать/разбираться во всех условиях/пожеланиях раскиданных по трём страницам совсем не хочется, т.е. сделать наверно возможно, но лично мне это уже не интересно.
0
|
|||||||
| 01.02.2018, 13:06 | |
|
Поменять формат лога
Ведение лога стабильности соединения Программа - парсинг лога. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|