oras / monolog-middleware
PSR-7 Monolog 中间件
Requires
- php: ^7.1 || ^7.2
- guzzlehttp/psr7: ^1.3 || ^1.4
- monolog/monolog: ^1.19
- psr/container: ^1.0
- psr/http-message: ~1.0.0
- psr/http-server-middleware: ^1.0
- roave/security-advisories: dev-master
- symfony/http-foundation: ^3.0
- zendframework/zend-stratigility: ^3.0
Requires (Dev)
- phpunit/phpunit: ^7.0
- squizlabs/php_codesniffer: ^2.3
This package is not auto-updated.
Last update: 2024-09-14 18:47:33 UTC
README
Monolog 日志中间件
用于与 PSR-7 中间件框架(如 Zend Expressive 和 Slim)一起使用的 Monolog 中间件。
现在它支持 Zend Expressive 3.*
要使用 Zend Expressive 1.*
,请安装版本 1.1.4
。要使用 Zend Expressive 2.*
,请安装版本 2.0.0
。
loggables
设置灵感来自 Guzzle 日志格式。您可以通过配置文件设置任何请求/响应/头中的数据,而不是在代码中设置,从而根据您的需求提供更多灵活性,以记录更多/更少的日志。
安装
1) 使用 composer 安装中间件
composer require oras/monolog-middleware
2) 添加配置
然后在您的 Zend Expressive config/autoload/
目录中,创建一个新的配置文件,命名为:logger.local.php
作为一个起点,您可以在文件中添加以下内容
use Monolog\Logger; return [ 'monolog' => [ 'logger_name' => 'MyLog', 'loggables' => '[{host}] {request}/{response}', // optional and current one is default format that will be logged 'handlers' => [ 'main' => [ 'type' => 'stream', 'path' => "data/main.log", 'level' => Logger::DEBUG, 'bubble' => true, ], ], ], ];
请参阅末尾的 Loggables 列表以获取所有可能的变量。
3) 将工厂和中间件添加到 dependencies.global.php
文件中,如下所示
'factories' => [ \MonologMiddleware\MonologMiddleware::class => \MonologMiddleware\Factory\MonologMiddlewareFactory::class, ],
4) 现在要开始记录中间件的请求/响应日志,只需在路由之后放置以下行即可。
示例
'routes' => [ [ 'name' => 'home', 'path' => '/', 'middleware' => [ App\Action\HomePageAction::class, \MonologMiddleware\MonologMiddleware::class, ], 'allowed_methods' => ['GET'], ], ];
现在每次调用路由 /
时,您将获得请求和响应的日志。
默认情况下,MonologMiddleware 将以调试模式记录日志。如果您想处理不同的级别,只需更改配置中的 level
。
需求
- PHP >= 7.1
配置示例
Monolog 中间件中每个实现的处理器的完整示例。请注意,这些可能不是 Monolog 支持的所有处理器,只是在这个中间件中实现的。
除非另有说明,否则所有行都是必需的。
流
$streamHandler = [ 'main' => [ 'type' => 'stream', 'path' => 'data/main.log', 'level' => Logger::DEBUG, 'bubble' => true, // optional ], ];
Loggly
$logglyHandler = [ 'loggly' => [ 'type' => 'loggly', 'token' => 'your-loggly-token', 'level' => Logger::DEBUG, 'bubble' => true, //optional ], ];
Slack
$slackHandler = [ 'slack' => [ 'type' => 'slack', 'token' => 'your-slack-token', 'channel' => '#your-slack-channel', 'level' => Logger::DEBUG, 'icon_emoji' => '::ghost::', // optional 'bubble' => true, // optional ], ];
Pushover
$pushOverHandler = [ 'pushover' => [ 'type' => 'pushover', 'token' => 'your-pushover-token', 'user' => 'pushover user', 'level' => Logger::ERROR, 'title' => 'Log title', // optional 'bubble' => true, // optional ], ];
本地电子邮件处理器
$nativeEmailHandler = [ 'native_email' => [ 'type' => 'native_email', 'level' => Logger::CRITICAL, 'from_email' => 'logs@yourserver.com', 'to_email' => 'email@email.com', 'subject' => 'Email subject', // optional 'max_column_width' => 70, //optional 'bubble' => true, // optional ], ];
浏览器控制台处理器
$browserConsoleHandler = [ 'browser_console' => [ 'type' => 'browser_console', 'level' => Logger::DEBUG, ], ];
Redis 处理器
$redisHandler = [ 'redis' => [ 'type' => 'redis', 'level' => Logger::DEBUG, 'redis_client' => new \Redis(), 'key' => 'monolog', ], ];
FirePHP 处理器
$redisHandler = [ 'firephp' => [ 'type' => 'firephp', 'level' => Logger::DEBUG, ], ];
NewRelic 处理器
$redisHandler = [ 'new_relic' => [ 'type' => 'new_relic', 'level' => Logger::DEBUG, 'app_name' => 'Monolog', // optional ], ];
Loggables 列表
要记录请求/响应正文,可以在 format
设置中使用 {req_body}
和 {res_body}
。
日志变量的完整列表及说明
扩展中间件
要扩展中间件以记录您自己的格式或特定数据(如 cookies、服务器参数等),您可以轻松地使用以下步骤
- 创建一个工厂类。我将其命名为
MyMonologMiddlewareFactory
,它将调用一个MyMonologMiddleware
类,该类将作为您定制的中间件以记录。
class MyMonologMiddlewareFactory { /** * @param ContainerInterface $serviceContainer * @return MonologMiddleware * @throws MonologConfigException */ public function __invoke(ContainerInterface $serviceContainer) { $config = $serviceContainer->get('config'); if (null === $config) { throw new MonologConfigException("Can not find monolog configuration in your config. Make sure to have monolog configuration array in your config"); } $helper = new MonologConfigurationExtension($config['monolog']); $logHandlers = $helper->getLogHandlers(); $loggerName = (isset($config['monolog']['logger_name']) ? $config['monolog']['logger_name'] : 'monolog'); /** * @var Logger */ $monologLogger = new Logger($loggerName); $monologLogger->setHandlers($logHandlers); return new MyMonologMiddleware($monologLogger); } }
- 创建中间件类
class MonologMiddleware implements MiddlewareInterface { /** * @var Logger */ protected $logger; /** * MonologMiddleware constructor. * @param Logger $logger */ public function __construct(Logger $logger) { $this->logger = $logger; } /** * @param ServerRequestInterface $request * @param ResponseInterface $response * @param callable $next * @return mixed */ public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null) { // Here you set logger level, message or any data that you'd like from your request or response. // For example, I am going to log cookie params $this->logger->addInfo(Logger::INFO, implode(", ", $request->getCookieParams()); return $next($request, $response); } }
- 将您的工厂和中间件添加到全局依赖文件中。假设您的中间件和工厂在同一个目录中,配置将是
'factories' => [ MyMonologMiddleware::class => MyMonologMiddlewareFactory::class, ],
就是这样...您已经准备好使用您自己的定制日志记录器了。
Monolog Middleware 是在我通勤时编写的。在西南列车上充满激情地编写。 请注意间隙!