schalkt/log

简单易配置的PHP日志文件系统

2.1.2 2024-04-06 10:46 UTC

This package is auto-updated.

Last update: 2024-09-06 11:39:44 UTC


README

一个基于模式的路径和消息的简单日志系统。对象和数组会自动转换为格式化的JSON。您还可以创建CSV文件。无需日志轮转,如果需要,只需删除旧的日志文件夹。

Latest Stable Version Total Downloads License GitHub issues Test

Maintainability Rating Security Rating Vulnerabilities Bugs

安装

  • composer require schalkt/log

特性

  • 基于模式的日志文件路径:/{TYPE}/{YEAR}/{YEAR}-{MONTH}/{TYPE}-{MONTH}-{DAY}
  • 基于模式的行:{DATE} | {STATUS} --- {MESSAGE}
  • 对象和数组会自动转换为格式化的JSON
  • 可定制的CSV行模式:'"{DATE}";{MESSAGE};"{BACKTRACE.CLASS}";"{BACKTRACE.FUNCTION}"'
  • 配置中的多个日志类型

可用日志级别

  • Log::to()->info($message, $title = null);
  • Log::to()->error($message, $title = null);
  • Log::to()->critical($message, $title = null);
  • Log::to()->warning($message, $title = null);
  • Log::to()->notice($message, $title = null);
  • Log::to()->debug($message, $title = null);
  • Log::to()->exception(\Exception $ex, $title = null);

示例

包含 {TYPE}, {YEAR}, {MONTH} 和 {DATE} 模式的示例文件夹结构

/storage/logs
    - /default
        - 2021
        - 2022
    - /logins
        - /2021
        - /2022
            - /2022-09
            - /2022-10
                - /INFO-2022-10-20.log
                - /INFO-2022-10-21.log
                - /INFO-2022-10-22.log
                - /ERROR-2022-10-22.log

使用默认配置

    use Schalkt\Slog\Log;

    require_once '/vendor/autoload.php';

    Log::to()->info('Hello World!');

更改默认日志文件夹

    use Schalkt\Slog\Log;

    require_once '/vendor/autoload.php';

    Log::default(["folder" => APP_PATH . '/storage/logs/default']);
    Log::to()->info('Hello World!');

添加新的配置

    use Schalkt\Slog\Log;

    require_once '/vendor/autoload.php';

    Log::config('import', [
        'folder' => APP_PATH . '/storage/logs/import',
        'folder_chmod' => 0700,
        'pattern_row' => '{DATE} {EOL} {STATUS} {EOL} {MESSAGE} {EOL} {REQUEST}',
    ]);

    // add an error to the import log
    Log::to('import')->error('Unique id required');

从文件加载自定义配置

    use Schalkt\Slog\Log;

    require_once '/vendor/autoload.php';

    // set config file path
    Log::configs('./config/logs.php');

    // add an error to the default log
    Log::to()->error('Password required');

    // add an input array to the login log with title
    Log::to('login')->notice($input, 'Invalid password');

配置

默认配置

return [
    'default' => [
        "folder" => APP_PATH . '/storage/logs/default',
        "folder_chmod" => 0770,
        "pattern_file" => "/{YEAR}-{MONTH}/{TYPE}-{YEAR}-{MONTH}-{DAY}",
        "pattern_row" => "{DATE} | {STATUS} --- {MESSAGE}",
        "extension" => "log",
        "format_date" => 'Y-m-d H:i:s',
    ]
];

自定义配置文件

return [
    "csv" => [
        "folder" =>  APP_PATH . '/storage/logs/csv',
        "header" => '"date";"message";"class";"function"',
        "pattern_file" => "/{TYPE}/{YEAR}-{MONTH}/{TYPE}-{YEAR}-{MONTH}-{DAY}",
        "pattern_row" => '"{DATE}";{MESSAGE};"{BACKTRACE.CLASS}";"{BACKTRACE.FUNCTION}"',
        "extension" => "csv",
    ],
    "login" => [
        "folder" => APP_PATH . '/storage/logs/login',
        "pattern_file" => "/logins/{TYPE}/{YEAR}-{MONTH}-{DAY}",
        "pattern_row" => "{DATE} {TITLE} {MESSAGE}",
    ],
];

模式中的可用变量

  • {MESSAGE} <- 函数的第一个参数(必需,字符串、数组、对象、任何类型)
  • {TITLE} <- 函数的第二个参数(非必需,字符串或数字)
  • {TYPE} <- 来自日志配置
  • {STATUS} <- info、error、critical、warning、notice、debug 或 exception
  • {REQUEST} <- 输出 $_REQUEST
  • {RAWBODY} <- file_get_contents('php://input')
  • {EOL} <- PHP_EOL
  • {DATE} <- 根据配置 "format_date" 日期,默认 "Y-m-d H:i:s"
  • {YEAR} <- date('Y')
  • {MONTH} <- date('m')
  • {DAY} <- date('d')
  • {HOUR} <- date('H')
  • {MIN} <- date('i')

待办事项

  • 可配置的输出(STDOUT、STDERR)