我如何从Monolog消息中获取时间?

时间:2018-12-18 14:26:04

标签: php monolog

我在项目中添加了Monolog v.1.24.0。

创建记录器:

$logger = new Logger('db');
$logger->setTimezone(DateTime::getTimezone()); 
$logger->pushHandler(new StreamHandler(ROOT.'/log/db.log', Logger::DEBUG, 600));

现在稍后在代码中,我会构造一条消息并将其发送到浏览器:

// $result contains my array
$tmp = \json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_UNESCAPED_SLASHES);
echo $tmp;
$logger->notice($tmp);

我的问题是我想提取存储在db.log中的日志中包含的时间信息,并将其包含在回显给用户的信息中。

那怎么可能?

PS:我可以自己构建时间,但是最好删除整个Monolog项目并使用我自己的时间!

1 个答案:

答案 0 :(得分:0)

您正在尝试使用独白和通常的PSR-3记录器来处理不应该以这种方式使用的内容...

在独白中内部发生的事情,或更确切地说,在这种情况下,PSR-3客户端发生的事情超出了您要实现的范围。您的业​​务领域很可能说您需要存储用户执行的操作的记录。然后这样做..并不是说您要记录它,或者它确实说您需要记录这两个记录。不应该混在一起。

此外,您不应该将内部独占功能与需要显示给用户的功能混在一起。

所以最终的解决方案是:

// $result contains my array
$tmp = \json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_UNESCAPED_SLASHES);
echo $tmp;

//
// write here custom code that saves my $msg where ever I need to and that it contains also the timestamp
//

// Then come here and log that my record is saved..
$logger->notice('Record is saved');

您必须了解logger是LOGGING的抽象层。您违反了SOLID的Liskov原理...如果将来从独白中删除DB / Stream Handler会发生什么?并将其替换为没有时间戳的其他内容。

您的代码将失败。

相关问题