firehed/dbal-logger

SQLLogger的重新实现

2.1.0 2024-08-30 17:03 UTC

README

前Doctrine DBAL SQLLogger的替代品

Test Lint Static analysis codecov

为什么?

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实现要迁移,您需要创建一个!

  1. 实现Firehed\Dbal\QueryLoggerFirehed\DbalLogger\DbalLogger
  2. 将其包装在一个middleware中:$middleware = new \Firehed\DbalLogger\Middleware($instanceOfYourClass);
  3. 根据上述内容将其添加到DBAL/Doctrine配置中。

这就完成了!

我需要将日志记录到多个后端!

没问题 - 有一个内置的ChainLogger,它接受一个QueryLogger/DbalLogger实例数组。配置后,它将所有接收到的日志事件转发给每个日志记录器。

$logger1 = new MyLogger();
$logger2 = new MyOtherLogger(); // Maybe metrics?
$chain = new ChainLogger([$logger1, $logger2]);
$config->setMiddlewares([new LoggerMiddleware($chain)])

其他

此项目遵循语义版本控制。

请使用GitHub报告任何问题或提出任何功能请求。