karelwintersky / arris.logger
Arris µFramework - AppLogger 类
1.99.0
2024-07-22 16:51 UTC
Requires
- php: ^7.4 || 8.*
- psr/log: ^1.0.1 || ^2.0 || ^3.0
Suggests
- karelwintersky/arris: Arris µFramework: AppRouter class
- karelwintersky/arris.helpers: Arris µFramework: helpers
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