[英]How do I log exceptions with appropriate linebreaks using Monolog with Slim 3?
[英]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.