问题标签 [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.

0 投票
1 回答
412 浏览

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)不会有改变这个的问题?

0 投票
1 回答
11953 浏览

php - 多行函数调用的左括号必须是该行的最后一个内容

我在我的 PHP 文件中编写了这段代码:

当我检查它时,使用 PHP Code Sniffer 我得到这个错误:

多行函数调用的左括号必须是该行的最后一个内容

这些错误来自以下几行:

如何解决?谢谢

0 投票
1 回答
419 浏览

php - 将类传递给回调函数的最佳方法

我正在使用 PSR-3 日志记录类,并尝试将它与set_error_handler(). 我的问题是如何正确“抓取”日志对象?

快速示例:

我的ErrorHandler.php

我的Logger.php

请注意,记录器可能会或可能不会启动,其想法是能够以某种方式轻松定义另一个记录器。

我突然想到我至少有两个选项,可以简单地使用一个名为$logger或类似的全局变量,并使用它(即使Logger在我的特定示例中对象不会在全局范围内初始化),或者使用一个单例模式“只是这一次”,我将在Logger类内部定义一个静态方法,以便我可以使用以下内容:

尽管我看到很多关于 Singleton 模式的非常苛刻的说法,有些人甚至称其为“反模式”。我在项目的其余部分使用依赖注入(尽我所能)。

我错过了另一个选择,还是有“正确”的方法来做到这一点?

0 投票
3 回答
545 浏览

php - 有条件地检查 PHP (Composer) 中是否存在建议的包

我正在开发一个 PHP 包(在 Composer 上分发),它可以从日志记录中受益,但不需要它。我见过许多composer.json包含建议包的示例文件,如下所示:

我将如何检测库在运行时是否可用?我想实例化一个默认实例(\Monolog\Logger如果可用),如果需要,允许包的使用者传入他们自己的Psr\Log\LoggerInterface接口实现。有没有这方面的最佳实践?

0 投票
1 回答
5972 浏览

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但我确定这不是正确的地方。

有什么建议么?

0 投票
1 回答
72 浏览

php - 在 PHP 中跨应用程序/网站访问记录器的最佳方式

我最近阅读PSR-3并有兴趣了解在 Web 应用程序或网站上实现记录器的最佳方法。我了解如何定义记录器以及如何根据 PSR-3 实现它们,但是如何在应用程序中访问/引用它们以满足各种记录需求,例如捕获的异常、显着事件等?

这三个选项浮现在脑海中。还有吗?哪个是最好的方法?

  1. 全局对象 -$logger->debug('foo')
  2. 全局静态实例 -Logger::debug('foo')
  3. 通过某种方法——$app->getLogger()->debug('foo')
  4. ...ETC...

我的考虑之一是将引用记录器所需的代码保持在最低限度。例如,上面的选项 3 似乎在整个应用程序中为每个适当的捕获异常、显着事件等检索记录器会变得相当乏味。

0 投票
1 回答
1889 浏览

php - PSR 日志 - 为什么 LoggerAwareInterface 和 LoggerAwareTrait 没有 NULL 默认值

根据您在Github上的示例,您在构造函数中注入了默认值为 NULL 的记录器接口。

表示某些东西有一个你可以实现的 LoggerPsr\Log\LoggerAwareInterfacePsr\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如果看起来像这样就更好了

所以请告诉我这个决定的背景?

0 投票
1 回答
368 浏览

php - PSR-3 插值

我想知道当你有一个 PSR-3 记录器时,它究竟用于插值函数是什么。通过查看此参考资料,我知道它是如何工作的:

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md#12-message

但到目前为止,我似乎还没有想出一个用例。为什么你不像往常一样简单地插入它?相反,他们选择使用带有占位符的上下文数组。

如果有人能告诉我为什么这会有所帮助,而不是将变量直接放在那里,我将不胜感激。

谢谢。

0 投票
0 回答
48 浏览

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