passchn / cakephp-logging
CakePHP 日志插件
0.1.0
2024-08-18 18:27 UTC
Requires
- php: ^8.2
- cakephp/cakephp: ^4.4 || ^5.0
- passchn/cakephp-simple-di: ^3.4
- psr/log: ^3.0
Requires (Dev)
- phpunit/phpunit: ^11.3
README
安装
您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。
安装 composer 包的推荐方法是
composer require passchn/cakephp-logging
加载插件
bin/cake plugin load Passchn/CakeLogging
使用
该插件使您能够配置 Cake Log 类,使用应用程序容器中可用的 PSR-3 日志记录器接口的实现。
它附带一个 MultiLogger,您可以在其中定义多个实现作为后备。
配置
在您的 config/app.php
中,您可以像这样配置日志记录器
return [ 'Log' => [ 'debug' => [ 'className' => LoggerFacade::class, // use the facade to configure the actual logger LoggerFacade::CONFIG_KEY_UNDERLYING_LOGGER => MyLoggerImplementation::class, // a LoggerInterface implementation ], ], ];
注意,MyLoggerImplementation
必须在您的容器中可用。
MultiLogger 使用
您还可以使用 MultiLogger 定义多个后备
return [ // default config for the multi logger MultiLoggerConfig::class => [ MultiLoggerConfig::CONFIG_KEY_LOGGERS => [ SentryLogger::class, FileLog::class, ], ], 'Log' => [ 'debug' => [ 'className' => LoggerFacade::class, LoggerFacade::CONFIG_KEY_UNDERLYING_LOGGER => MultiLogger::class, MultiLoggerConfig::class => [ // multi logger config can be overridden here MultiLoggerConfig::CONFIG_KEY_LOGGERS => [ MyLoggerImplementation::class, AnotherLoggerImplementation::class, FileLog::class, // the default file logger as fallback ], ], 'path' => LOGS, 'file' => 'debug', 'url' => env('LOG_DEBUG_URL', null), 'scopes' => null, 'levels' => ['notice', 'info', 'debug'], ], 'error' => [ // ... ], 'emergency' => [ 'className' => FileLog::class, 'className' => LoggerFacade::class, LoggerFacade::CONFIG_KEY_UNDERLYING_LOGGER => MultiLogger::class, MultiLoggerConfig::CONFIG_KEY_LOGGERS => [ SmsEmergencyLogger::class, AlexaTextToSpeechAlarmWithWaterSprinklerLogger::class, ], ], ], ];
如果您使用默认的 FileLogger,请保留配置键不变,因为它们将用于 FileLog 配置。
多日志记录器使用的每个日志记录器都必须是您的容器中可用的 LoggerInterface 的实现。
配置自定义日志记录器
如果您想配置自定义日志记录器,可以通过实现 LoggerInterface
并将其添加到您的容器中来实现。
use Psr\Log\LoggerInterface; class MyLoggerImplementation extends \Psr\Log\AbstractLogger implements LoggerInterface { public function __construct( private readonly SomeDependency $dependency, ) { // ... } public function log($level, $message, array $context = []) { // your implementation } }
然后,您可以将其添加到您的容器中。
在您的 Application.php 中
public function services(ContainerInterface $container): void { $container->add( MyLoggerImplementation::class, fn () => new MyLoggerImplementation( $container->get(SomeDependency::class), ), ); }
然后,您只需通过将类名添加到您的 app.php 配置中相应的日志作用域来使用实现。
MultiLoggerConfig::CONFIG_KEY_LOGGERS => [ MyLoggerImplementation::class, ... ],
有关依赖注入的更多信息,请参阅 CakePHP 书籍。
合作
如果您有任何想法或遇到错误,请随时打开一个问题或拉取请求。