问题标签 [psr-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 日志行格式
我在基于 PSR-3 标准(以及随它提供的接口/类 - https://github.com/php-fig/log)实现日志系统时遇到问题。
我创建了一些扩展 PSR-3 的类:logger,它使用适配器进行实际日志记录(logger 类存储适配器实例并在其中调用 log() 方法),我来到文件适配器(将日志消息写入文件的适配器)) 我正在寻找一些方法来实现自定义日志行格式。我的意思是我可以将消息记录为
[01/01/2013 12:00:00] NOTICE: Log message content\n
也
user: Log message content (NOTICE) ~ 01-01-2013
(完整的定制订单和内容)
另外,我想为此创建单独的类。
有没有办法以非常容易的方式做到这一点,所以其他人(甚至是低技能的phpers)不会有改变这个的问题?
php - 多行函数调用的左括号必须是该行的最后一个内容
我在我的 PHP 文件中编写了这段代码:
当我检查它时,使用 PHP Code Sniffer 我得到这个错误:
多行函数调用的左括号必须是该行的最后一个内容
这些错误来自以下几行:
如何解决?谢谢
php - 将类传递给回调函数的最佳方法
我正在使用 PSR-3 日志记录类,并尝试将它与set_error_handler()
. 我的问题是如何正确“抓取”日志对象?
快速示例:
我的ErrorHandler.php
:
我的Logger.php
:
请注意,记录器可能会或可能不会启动,其想法是能够以某种方式轻松定义另一个记录器。
我突然想到我至少有两个选项,可以简单地使用一个名为$logger
或类似的全局变量,并使用它(即使Logger
在我的特定示例中对象不会在全局范围内初始化),或者使用一个单例模式“只是这一次”,我将在Logger
类内部定义一个静态方法,以便我可以使用以下内容:
尽管我看到很多关于 Singleton 模式的非常苛刻的说法,有些人甚至称其为“反模式”。我在项目的其余部分使用依赖注入(尽我所能)。
我错过了另一个选择,还是有“正确”的方法来做到这一点?
php - 有条件地检查 PHP (Composer) 中是否存在建议的包
我正在开发一个 PHP 包(在 Composer 上分发),它可以从日志记录中受益,但不需要它。我见过许多composer.json
包含建议包的示例文件,如下所示:
我将如何检测库在运行时是否可用?我想实例化一个默认实例(\Monolog\Logger
如果可用),如果需要,允许包的使用者传入他们自己的Psr\Log\LoggerInterface
接口实现。有没有这方面的最佳实践?
php - 致命错误:在第 30 行的 Logger.php 中找不到类“Psr\Log\AbstractLogger”
我收到此错误:
致命错误:在第 30 行的 /var/www/html/rackspace/vendor/rackspace/php-opencloud/lib/OpenCloud/Common/Log/Logger.php 中找不到类 'Psr\Log\AbstractLogger'
这是我的 Logger.php 文件
这是我在 Logger.php 文件的第 30 行找到的
我已经安装了Psr,/var/www/html/rackspace/vendor/rackspace/php-opencloud/lib/OpenCloud/Common/Log
但我确定这不是正确的地方。
有什么建议么?
php - 在 PHP 中跨应用程序/网站访问记录器的最佳方式
我最近阅读PSR-3
并有兴趣了解在 Web 应用程序或网站上实现记录器的最佳方法。我了解如何定义记录器以及如何根据 PSR-3 实现它们,但是如何在应用程序中访问/引用它们以满足各种记录需求,例如捕获的异常、显着事件等?
这三个选项浮现在脑海中。还有吗?哪个是最好的方法?
- 全局对象 -
$logger->debug('foo')
- 全局静态实例 -
Logger::debug('foo')
- 通过某种方法——
$app->getLogger()->debug('foo')
- ...ETC...
我的考虑之一是将引用记录器所需的代码保持在最低限度。例如,上面的选项 3 似乎在整个应用程序中为每个适当的捕获异常、显着事件等检索记录器会变得相当乏味。
php - PSR 日志 - 为什么 LoggerAwareInterface 和 LoggerAwareTrait 没有 NULL 默认值
根据您在Github上的示例,您在构造函数中注入了默认值为 NULL 的记录器接口。
表示某些东西有一个你可以实现的 LoggerPsr\Log\LoggerAwareInterface
和Psr\Log\LoggerAwareTrait
.
重新构建示例代码,它看起来像这样
那很好而且工作,但如果我会这样做
它最终会must be an instance of Psr\Log\LoggerInterface, null given
出错,因为接口中的方法声明上没有 NULL 默认值。当然,可以通过使用 if 或传递 a 来防止此错误,NullLogger
但这很奇怪。
Beeing 能够在构造函数中传递一个可选的 Logger 实例会让我认为我可以稍后通过将 Logger 设置为 NULL 值来更改该实例。当然这是一个示例代码,但让我们看看问题
所以基本上我可以将 NULL 引用传递给构造函数,但我无法调用 setter,因为不允许使用 NULL。Psr\Log\LoggerAwareInterface
如果看起来像这样就更好了
所以请告诉我这个决定的背景?
php - PSR-3 插值
我想知道当你有一个 PSR-3 记录器时,它究竟用于插值函数是什么。通过查看此参考资料,我知道它是如何工作的:
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md#12-message
但到目前为止,我似乎还没有想出一个用例。为什么你不像往常一样简单地插入它?相反,他们选择使用带有占位符的上下文数组。
如果有人能告诉我为什么这会有所帮助,而不是将变量直接放在那里,我将不胜感激。
谢谢。
linux - 从 linux 终端查看和过滤漂亮的实时 PSR-3 日志文件的最佳方法是什么?
我正在使用 Monolog/Monolog 来登录我的 PHP 应用程序。有很多关于如何使用 PSR-3 标准记录文件的信息,但很少有关于如何轻松查看和过滤它们的信息。
使用 linux 终端,我想观看这些 PSR-3 日志文件,因为它们是由 Monolog 生成的。例如,我想做一些或组合这些:
- 监视等于 CRITICAL 的日志事件
- 监视高于 DEBUG(100) 的日志级别
- 观察日志级别低于 CRITICAL。
- 仅观看一个或多个特定频道
- 为日志事件的元素着色(日期、级别(调试=黑色、警告=黄色、错误=红色)、通道、消息、额外数组等)
是否有帮助过滤和着色 PSR-3 日志文件的软件包?
我已经尝试过这样的命令,但它们仍然不足:
tail -f logfile.log
tail -f logfile.log | grep WARNING --color=auto
- 像这样的命令有一个不需要的副作用,包括可能是 level=DEBUG 但在日志消息中也有“WARNING”的事件
我正在使用的 Monolog PHP 包在这里:https ://packagist.org/packages/monolog/monolog