fdekker/log-viewer-bundle

适用于 Symfony 6 及以上版本的日志查看器包

v1.3.2 2024-08-25 19:02 UTC

README

License Minimum PHP Version Minimum Symfony Version Vuejs codecov Run tests

Symfony 的日志查看器

灵感来自 opcodesio/log-viewer for Laravel log-viewer

日志查看器: 为您的 Symfony 应用提供的一个包。它提供用户友好的界面来读取、过滤和搜索日志文件。

默认情况下,它会读取位于 var/log 目录中的 Monolog 日志,但可以配置为从任何目录读取日志。

功能

  • 📂 查看 %kernel.logs_dir% 目录中的所有 Monolog 日志
  • 📂 查看其他类型的日志 - Apache、Nginx 或自定义日志,
  • 🔍 搜索 日志,
  • 🔍 通过日志级别(错误、信息、调试等)、通道、日期范围或日志内容包含或排除来 过滤
  • 🔍 同时 搜索 多个日志文件,
  • 🌑 暗黑模式
  • 🕑 以本地时区显示日志条目
  • 🖥️ 支持 多个主机
  • 💾 从 UI 中 下载删除 日志文件,
  • ☎️ 为文件夹、文件和日志条目提供 API 访问

入门

要求

  • PHP 8.1+
  • Symfony 6.0+ 或 7.0+

安装

使用 composer

composer require fdekker/log-viewer-bundle

如果您不使用 Symfony Flex,则需要手动启用该包

# /config/bundles.php
return [
    // ...
    FD\LogViewer\FDLogViewerBundle::class => ['all' => true],
];

并通过创建文件 /config/routes/fd_log_viewer.php 来添加路由

<?php
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

return static function (RoutingConfigurator $routingConfigurator): void {
    $routingConfigurator->import('.', 'fd_symfony_log_viewer')->prefix('/log-viewer');
};

通过在 /config/packages/security.php 中添加以下行来确保对您的日志的访问是安全的

return static function (SecurityConfig $security): void {
    ...
    $security->accessControl()->path('^/log-viewer')->roles(['ROLE_ADMIN']);
};

安装包后,通过运行以下命令发布前端资源

php bin/console assets:install

使用

安装完成后,您可以直接在浏览器中访问 日志查看器

默认情况下,它位于您域名的 /log-viewer

配置

默认配置: (配置参考)

fd_log_viewer:
    home_route: null

    log_files:
        monolog:
            type: monolog
            name: Monolog
            finder:
                in: "%kernel.logs_dir%"
                name: "*.log"
                depth: '== 0'
                ignoreUnreadableDirs: true
                followLinks: false
            downloadable: false
            deletable: false
            start_of_line_pattern: '/^\[\d{4}-\d{2}-\d{2}[^]]*]\s+\S+\.\S+:/'
            log_message_pattern: '/^\[(?P<date>[^\]]+)\]\s+(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+(?P<message>.*)\s+(?P<context>[[{].*?[\]}])\s+(?P<extra>[[{].*?[\]}])\s+$/s'
            date_format: null

    hosts:
        localhost:
            name: Local
            host: null

阅读更多