我想用在我的Symfony的Web应用程序与Monlog创建日志条目自定义格式:使用此格式开始创建了[1]...
而不是插入正确的时间戳一样[2015-12-16 10:40:23]...
Symfony config.yml - 如何通过名称传递构造函数参数?
//config.yml
services:
monolog.formatter.extended:
class: Monolog\Formatter\LineFormatter
arguments:
format: "[%%datetime%%] %%channel%%.%%level_name%% ...\n\n"
allowInlineLineBreaks: true
ignoreEmptyContextAndExtra: true
calls:
- [includeStacktraces]
的所有日志条目此问题不显示当我删除了两个额外的paramters allowInlineLineBreaks
和ignoreEmptyContextAndExtra
:
arguments:
format: "[%%datetime%%] %%channel%%.%%level_name%% ...\n\n"
但是,当我不通过名称传递参数,而是简单地将其作为完整列表传递时,一切正常。该LineFormatter
构造是这样的:
public function __construct($format = null, $dateFormat = null, $allowInlineLineBreaks = false, $ignoreEmptyContextAndExtra = false) { ...}
所以添加的参数为列表workes罚款:
arguments:
- "[%%datetime%%] %%channel%%.%%level_name%% ...\n\n"
- null
- true
- true
什么是错的名字传递的参数?我已经在几个例子中看到了这一点,但是明显的是我使用这个方法有什么问题?
谢谢你的回答!我在不同的例子中看到了这个名称风格(例如http://www.petethompson.net/blog/symfony/2015/03/15/symfony-logging-client-ip/和http://stackoverflow.com/a/11654384/777861),并认为它将有效的语法。但是你是对的,我找不到任何使用这种风格的文档。奇怪。 –
似乎依赖关系注入器只考虑值,所以如果您使用该名称并保持顺序确定,但如果尝试更改顺序,它也将以错误的顺序注入。我也在研究一些内部的东西,看起来好像关键只是用来取代你需要的参数。 –
感谢您的提示,这是完全有道理的。由于dateFormat是第二个参数,很明显,当“true”(或其他不是有效的)作为第二个参数传递时,这是无法解决的,不会使用任何名称。 –