karelwintersky/arris.logger

Arris µFramework - AppLogger 类

1.99.0 2024-07-22 16:51 UTC

This package is auto-updated.

Last update: 2024-09-22 17:22:04 UTC


README

初始化日志器类

AppLogger::init($application, $instance, $options = []):void
  • $application - 应用程序名称
  • $instance - 应用程序实例代码(建议在应用程序启动时生成,并使用此代码区分并行记录的不同应用程序实例的日志)
  • $options 应用程序选项
    • bubbling - [FALSE] - 日志消息是否弹起?
    • default_log_level - [Monolog::DEBUG] - 默认日志级别
    • default_logfile_path - '' - 默认日志文件路径
    • default_logfile_prefix - '' - 默认日志文件前缀
    • default_log_file - '_.log' - 默认日志文件名,如果传递了 NULL 则应用
    • default_handler - 或实现 \Monolog\Handler\HandlerInterface 的处理器,作为此作用域的默认日志器
    • add_scope_to_log - [FALSE] - 是否将作用域名称添加到日志文件名中?
    • deferred_scope_creation - [TRUE] - 是否允许作用域的延迟初始化?
    • deferred_scope_separate_files - [TRUE] - 对于延迟作用域是否使用不同的文件(基于作用域名称)?

添加作用域

AppLogger::addScope($scope = null, $scope_levels = [], $scope_logging_enabled = true, $is_deferred_scope = false):void

添加具有参数的作用域(日志器)

  • $scope - 作用域名称
  • $scope_levels - 包含日志记录级别选项的数组
  • $scope_logging_enabled - 是否启用此作用域的日志记录。这是作用域的全局设置,如果禁用日志记录,则不会启用传递给 $scope_levels 的任何选项。如果此参数禁用(false),但作用域被创建,则对于所有日志记录级别,处理器将设置为 NullLogger
  • $is_deferred_scope - 服务参数,不要直接指定(它设置日志器作为 deferred 创建)

按级别(日志记录)传递日志器设置到 $scope_levels 数组中。可以传递空数组 - 那么将应用“默认”选项(基于全局选项),并且作用域将作为 'deferred'(延迟初始化)创建。

示例

AppLogger::addScope('mysql', 
[
    [ '__mysql.100-debug.log', Logger::DEBUG, 'enable' => true],
    [ '__mysql.250-notice.log', Logger::NOTICE,  'enable' => true],
    [ '__mysql.300-warning.log', Logger::WARNING,  'enable' => true],
    [ '__mysql.400-error.log', Logger::ERROR,  'enable' => true],
], getenv('IS_MYSQL_LOGGER_ENABLED'));

日志记录级别参数(选项数组的元素)

  • 第一个元素:filename - 文件名(如果不存在,将应用全局选项中的默认名称)
  • 第二个元素:logging_level - 日志记录级别,可以使用数字或(更方便)使用来自同一命名空间的常量 \Monolog\Logger::DEBUG 等。

其他参数通过关联数组键传递

  • enabled - [TRUE],是否允许此日志记录级别。适用于与全局选项 $scope_logging_enabled 用于作用域的相同机制;
  • bubbling - [FALSE],日志记录消息是否弹起到下一个(更低)级别?
  • handler - [NULL] 或实现 Monolog\Handler\HandlerInterface 接口的处理器。如果指定 NULL - 将使用默认处理器:StreamHandler,将日志写入文件。

NB: 应注意,如果使用作用域中未声明的日志器,例如

AppLogger::scope('mysql')->emergency('MYSQL EMERGENCY');

Monolog 将根据所有声明的级别发送此消息。

用法

AppLogger::scope($scope_name) 的调用返回一个 \Monolog\Logger 实例,可以对其应用标准日志记录方法

debug, notice, warn, error, emergency и так далее

例如

AppLogger::scope('mysql')->debug("mysql::Debug", [ ['x'], ['y']]);
AppLogger::scope('mysql')->notice('mysql::Notice', ['x', 'y']);

延迟作用域

可以使用具有默认参数的延迟初始化作用域。此机制称为延迟作用域。

调用与预先初始化的日志器相同

AppLogger::scope('usage')->emergency('EMERGENCY USAGE');

在这种情况下,将创建具有所有日志记录级别和默认参数的 usage 作用域(但实际的日志器调用仅针对 emergency 级别发生)。

NB: 如果在通过 addScope() 方法初始化常规作用域时传递空选项日志器数组,则将应用延迟作用域初始化机制。

注意事项(使用提示)

一个文件用于多个日志级别

指定最小使用的日志级别(Logger::NOTICE

AppLogger::addScope('log.selectel', [ [ '_selectel_upload.log', Logger::NOTICE ]  ]);

现在这两个调用将在文件中写入2行

AppLogger::scope('log.selectel')->error('Error');
AppLogger::scope('log.selectel')->notice('Notice');

自定义处理器

AppLogger::addScope('console', [
        [ 'php://stdout', Logger::INFO, [ 'handler' => StreamHandler::class ]]
    ], $options['verbose']);

添加标准流处理器(到stdout)。只有在$options['verbose'] === true时才使用。

  AppLogger::addScope('console', [
        [ 'php://stdout', Logger::INFO, [ 'handler' => static function()
          {
              $formatter = new \Arris\Formatter\LineFormatterColored("[%datetime%]: %message%\n", "Y-m-d H:i:s", false, true);
              $handler = new StreamHandler('php://stdout', Logger::INFO);
              $handler->setFormatter($formatter);
              return $handler;
          }
    ], $options['verbose']);

添加自定义日志处理器和格式化器。

https://stackoverflow.com/questions/70875746/laravel-monolog-lineformatter-datetime-pattern