firehed / dbal-logger
SQLLogger的重新实现
Requires
- php: ^8.1
- doctrine/dbal: ^4.0
Requires (Dev)
- maglnet/composer-require-checker: ^2.0 || ^3.0 || ^4.0
- mheap/phpunit-github-actions-printer: ^1.5
- phpstan/phpstan: ^1.0
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: ^3.5
Conflicts
- nikic/php-parser: <v4.12
This package is auto-updated.
Last update: 2024-08-30 17:05:38 UTC
README
前Doctrine DBAL SQLLogger的替代品
为什么?
Doctrine\DBAL\Logging\SQLLogger已被弃用。基于Middleware的内置替代品与之相似,但有一些关键的不同之处
- 它与PSR-3日志记录器直接绑定
- 日志格式(和级别)是Middleware的一部分;无法自定义
- 没有查询完成的日志事件;这使得无法将日志记录器用于应用程序遥测。
与原始版本相似之处
基本的QueryLogger
API保持不变:startQuery()
和stopQuery()
。
与原始版本的不同之处
Doctrine\DBAL\Logging\SQLLogger
现在是Firehed\DbalLogger\QueryLogger
(API保持不变)。
DBAL/ORM的设置不同;这是由于弃用而创建此库的根本原因。
原始SQLLogger的移植没有本地返回类型,而是倾向于使用文档块。这为接口添加了显式的返回类型。
有一个新的DbalLogger
接口,您的日志记录器也可以实现,为connect()
和disconnect()
事件创建钩子。这是可选的,如果您想要低成本的转换,坚持基本的QueryLogger
接口即可。
SAVEPOINT
查询要么会出现在其底层连接特定的语法中,要么可能根本不会出现。我不确定如何测试这一点!(doctrine/dbal/src/Connection.php及其相关内容)
如何使用此工具
如果您有一个实现DBAL SQLLogger接口的实现(您可能在这里),您需要做出以下更改
- 使其实现
Firehed\DbalLogger\QueryLogger
而不是Doctrine\DBAL\Logging\SQLLogger
- 将其包装在Middleware中:
$middleware = new Firehed\DbalLogger\Middleware($yourQueryLogger);
- 调整您的DBAL/Doctrine设置代码以使用Middleware而不是直接使用Logger
-$config->setSQLLogger($yourSQLLogger); +$config->setMiddlewares([$middleware]);
如果您没有SQLLogger实现要迁移,您需要创建一个!
- 实现
Firehed\Dbal\QueryLogger
或Firehed\DbalLogger\DbalLogger
- 将其包装在一个middleware中:
$middleware = new \Firehed\DbalLogger\Middleware($instanceOfYourClass);
- 根据上述内容将其添加到DBAL/Doctrine配置中。
这就完成了!
我需要将日志记录到多个后端!
没问题 - 有一个内置的ChainLogger
,它接受一个QueryLogger
/DbalLogger
实例数组。配置后,它将所有接收到的日志事件转发给每个日志记录器。
$logger1 = new MyLogger(); $logger2 = new MyOtherLogger(); // Maybe metrics? $chain = new ChainLogger([$logger1, $logger2]); $config->setMiddlewares([new LoggerMiddleware($chain)])
其他
此项目遵循语义版本控制。
请使用GitHub报告任何问题或提出任何功能请求。