Формат и поведение
Реализуйте CLI для анализа текстового файла журнала. Каждая корректная строка имеет фиксированный формат: дата и время в UTC как YYYY-MM-DDTHH:MM:SSZ, затем пробел, уровень из INFO, WARN или ERROR, затем пробел и непустое сообщение. Разделителем полей является ровно один пробел после метки времени и после уровня; оставшаяся часть строки целиком является сообщением, поэтому она может содержать пробелы. Пустые строки считаются некорректными. Файл читается построчно, а исходник никогда не изменяется.
Путь к файлу задаётся позиционно; --from и --to задают необязательные включительные границы календарной даты в формате YYYY-MM-DD, а --level принимает один или несколько перечисленных уровней через запятую. При указании нескольких уровней достаточно совпадения с любым из них. Проверьте, что начало диапазона не позже конца. Сначала разберите строку, затем примените фильтр: число ошибок показывает количество всех корректных ERROR-записей во всём файле, независимо от выбранного фильтра. Отчёт также содержит число корректных строк, число попавших под фильтр строк и список этих строк в исходном порядке. Число некорректных строк и их номера должны быть показаны отдельным разделом; повреждённые записи не входят в счётчики.
При ошибке открытия или чтения файла, неизвестном уровне фильтра, неверной дате, обратном диапазоне или неизвестном аргументе завершайте CLI с ненулевым кодом и диагностикой в stderr. Ошибки формата отдельной строки не прерывают разбор всего файла, но каждая такая строка учитывается. Укажите предельную длину строки 1 MiB; превышение считайте ошибкой чтения с указанием номера строки. Реализация должна быть детерминированной, использовать стандартную библиотеку и включать тесты для парсера и фильтрации.
Структура программы
В main.go оставьте чтение флагов, открытие файла, запуск анализа и выбор кода завершения. Разместите разбор одной строки, фильтрацию и подсчёт в отдельных функциях package main в файле анализа; оформление отчёта держите отдельно. Передавайте строки и параметры функциям, чтобы тестировать parser и правила без CLI и os.Exit.