besnovatyj/yii2-cms-monolog 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

besnovatyj/yii2-cms-monolog

Composer 安装命令:

composer require besnovatyj/yii2-cms-monolog

包简介

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

README 文档

README

Модуль-вьювер логов, которые пишет Monolog в каталог @runtime/logs. Работает только со своей конвенцией имён (monolog*). Для всех логов приложения — отдельный модуль besnovatyj/yii2-cms-logs (та же логика, более широкий охват).

Примечание: файл MONOLOG_LOGS_README.md в этом каталоге описывает старое поведение и устарел — актуальная логика здесь.

Откуда берутся файлы (контракт с писателями)

Логи пишет common\components\log\MonologTarget через common\components\log\HandlerFactory (хендлер rotating_file, JSON-формат — одна запись на строку, BATCH_MODE_NEWLINES). Каналы объявляются декларативно в app/common/config/log.php (core: app, auth, modman) и в Module::getLogChannels() устанавливаемых модулей (modman собирает их в @config-dyn-gen/logChannelsConfigFile.php).

RotatingFileHandler всегда пишет в датированный файл — статического «текущего» файла не существует. «Текущий» = файл с сегодняшней датой.

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

<base>[-<Y-m-d>][.<YmdHis>].log[.zip]
  • base — логический ключ канала: monolog, monolog-auth, monolog-modman. Конвенция: monolog-{channel}.log → при ротации monolog-{channel}-Y-m-d.log; глобальный канал — monolog.logmonolog-Y-m-d.log.
  • -<Y-m-d> — суточная ротация Monolog.
  • .<YmdHis> — метка принудительной ротации «в историю» (см. Rotate).
  • .zip — ZIP-архив.

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

Детерминированный парсер имени (а не набор хрупких регэкспов). Раскладывает имя на base, rotateDate, archiveStamp, isZip и определяет вид:

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

getBase() — ключ канала; по нему группируется история (НЕ по slug). looksLikeLog() — фильтр каталога: только monolog*…\.log[.zip].

Слои

  • entities/MonologLog — обёртка над файлом. getKind(), getChannelKey(), getIsCurrent(), getIsZip(), чтение записей с пагинацией, подсчёт уровней (getCounts — по level_name JSON; для zip возвращает пусто). slug = Inflector::slug(имя_файла) — стабилен per-file, в т.ч. для zip.
  • repositories/MonologFileLogRepository — один проход по каталогу, фильтрация по kind. getBySlug() ищет среди всех файлов любого вида. findHistoryBySlug() — все НЕ-current файлы того же канала (история + zip).
  • services/MonologLogManageService — бизнес-операции (ниже).
  • controllers/backend/MonologLogController + views.

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

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

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

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

В текущий файл прямо сейчас пишет открытый дескриптор Monolog, поэтому:

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

Связанные пакеты

common\components\log\MonologTarget, common\components\log\HandlerFactory, app/common/config/log.php, modules/modman (сборщик каналов модулей).

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-07

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固