besnovatyj/yii2-cms-logs
Composer 安装命令:
composer require besnovatyj/yii2-cms-logs
包简介
Модуль просмотра и управления логами для Yii2 CMS
README 文档
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>— суточная ротация MonologRotatingFileHandler(статического «текущего» файла нет — всегда датированный; «текущий» = с датой сегодня)..<YmdHis>— метка принудительной ротации «в историю» (механизм copy+truncate)..<N>— нумерная ротация YiiFileTarget(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 (без экшенов в контроллере) удалены.
统计信息
- 总下载量: 1
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-07-07