besnovatyj/yii2-cms-logs

Модуль просмотра и управления логами для Yii2 CMS

Maintainers

Package info

github.com/besnovatyj/yii2-cms-logs

Type:yii2-extension

pkg:composer/besnovatyj/yii2-cms-logs

Transparency log

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.1 2026-07-08 18:19 UTC

This package is auto-updated.

Last update: 2026-07-08 18:22:03 UTC


README

Модуль-вьювер всех лог-файлов в @runtime/logs: и Monolog-датированных, и нумерной ротации Yii FileTarget (app.log, app.log.1, …), и ZIP-архивов. Логика идентична besnovatyj/yii2-cms-monolog, но охват шире (тот модуль — только monolog*). Классификатор LogFileName намеренно продублирован (пакеты независимы).

Конвенция имён файлов

<base>[-<Y-m-d>][.<YmdHis>].log[.<N>][.zip]
  • base — логический ключ канала/группы (app, monolog, monolog-auth, …); по нему группируется история.
  • -<Y-m-d> — суточная ротация Monolog RotatingFileHandler (статического «текущего» файла нет — всегда датированный; «текущий» = с датой сегодня).
  • .<YmdHis> — метка принудительной ротации «в историю» (механизм copy+truncate).
  • .<N> — нумерная ротация Yii FileTarget (app.log.1, app.log.2, …).
  • .zip — ZIP-архив.

Классификация: entities/LogFileName

Детерминированный парсер имени вместо хрупких регэкспов:

  • zip — оканчивается на .zip;
  • history — есть archiveStamp ИЛИ numIndex (нумерная ротация Yii) ИЛИ rotateDate < сегодня;
  • current — иначе (даты/номера нет, либо дата == сегодня).

getBase() — ключ канала (история группируется по нему, НЕ по slug). looksLikeLog() — любой файл, содержащий .log (опц. .N и/или .zip).

Слои

  • entities/Log — обёртка над файлом. getKind(), getChannelKey(), getIsCurrent(), getIsZip(), getCounts() (по plain-тексту Yii … [уровень]; для zip — пусто). slug = Inflector::slug(имя_файла) — стабилен per-file, в т.ч. для zip.
  • repositories/FileLogRepository — один проход по каталогу, фильтр по kind. getBySlug() — среди всех файлов любого вида. findHistoryBySlug() — все НЕ-current файлы того же канала (история + zip).
  • services/LogManageService — бизнес-операции (ниже).
  • controllers/backend/LogController + views. view отдаёт файл инлайн text/plain; tail — последние строки через tail.

Страницы и действия

Страница Содержимое Действия
index текущие файлы (по одному на канал/группу) History, View, Rotate, Zip, Download, Delete
index-history ротированные (Monolog-дата, Yii-.N, принуд.) View, Zip, Download, Delete
index-zip только .zip Download, Delete
history?slug= история конкретного канала (история + zip) View, Zip, Download, Delete (View/Zip скрыты для zip)

Download доступен для файла на любой стадии.

Rotate и Zip — механизм copy+truncate

В текущий файл может прямо сейчас писать открытый дескриптор писателя (Monolog / Yii FileTarget), поэтому:

  • Rotate (только текущий файл): копировать в <имя>.<YmdHis>.log (станет history), затем обнулить текущий — открытый дескриптор продолжает писать в тот же inode (теперь пустой), без потери записей.
  • Zip: упаковать в <имя>.zip. Для текущего файла оригинал не удаляется, а обнуляется (та же причина). Для остальных — упаковать и удалить.

История изменений логики

Модуль отпочковался от логики просмотра логов; классификация была завязана на устаревшие регэкспы (одна дата-метка, односегментное имя), из-за чего многоканальные Monolog-файлы и заархивированные с меткой YmdHis пропадали. Заменено единой моделью LogFileName + группировкой по base. Мёртвые действия zip-all/clean-all (без экшенов в контроллере) удалены.