繁体   English   中英

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

[英]How do I get the time from Monolog message?

我在项目中添加了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项目并使用我自己的项目!

您正在尝试使用独白和通常的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会发生什么? 并用其他没有时间戳的东西替换它。

您的代码将失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM