Symfonyob娱乐下载 2.4新增功能:在控制台显示日志
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
我很高兴地宣布,Symfony 2.4将提供一个新特性:您可以在命令的控制台输出中自动显示日志消息。ob娱乐下载这大大简化了控制台命令中的反馈。在向您展示如何使用这个特性之前,让我们先看看它解决了什么问题。
当您希望将文本输出到控制台时,通常使用OutputInterface实例,当你的命令执行时传递,如下例所示:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
受保护的函数执行(InputInterface$输入, OutputInterface$输出){$数据=$输入->getArgument (“数据”);$myService=$这->getContainer ()->get (“my_service”);如果($输出->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG) {$输出->writeln (sprintf ('已接收数据:%s',$数据));}如果($输出->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {$输出->writeln (“处理数据…”);}$returnValue=$myService->过程($数据,$输出);如果($returnValue) {$输出->writeln (' <信息> > < /信息成功”);}其他的{$输出->writeln (' <错误> > < /错误的失败);}}
但有两个问题:
- 根据详细设置(-v, -vv, -vvv)打印信息非常麻烦,因为需要将调用包装在条件中。
- 如果您呼叫的服务也想提供反馈,则需要传递
输出美元
与myService - >过程(数据,输出美元)
.但就关注点分离和耦合而言,这确实是糟糕的代码。如果这个服务依赖于另一个服务呢?与OutputInterface
传递实例不是正确的方法。
为了解决这些问题,我认为依赖于高度相关的日志记录器会更容易。所以我加了积分ob娱乐下载Symfony控制台组件和Symob娱乐下载fonys日志库独白.它为独白提供了一个新的处理程序(ConsoleHandler
)听控制台的事件激活后将根据当前日志级别和控制台详细信息将日志消息写入控制台输出。默认情况下,日志级别和详细信息之间的映射如下:
OutputInterface: VERBOSITY_NORMAL
会显示所有警告更高的对数,OutputInterface: VERBOSITY_VERBOSE
(- v
)将显示所有请注意更高的对数,OutputInterface: VERBOSITY_VERY_VERBOSE
(vv
)将显示所有信息更高的对数,OutputInterface: VERBOSITY_DEBUG
(-vvv_
)将显示所有调试更大的对数,也就是所有的对数。
现在让我们看看如何在您的Symfony项目中激活和配置这个特性。ob娱乐下载与公关# 42在MonologBundle上,我使这个处理程序就像任何其他的独白处理程序一样可配置。它所需要的只是一个类型的附加处理程序控制台
在你的config_dev.yml
而且config_prod.yml
文件:
1 2 3 4 5 6 7 8
独白:处理程序:主要:类型:流路径:“% kernel.logs_dir % / % kernel.environment % . log”水平:调试控制台:类型:控制台
这样,在运行命令时记录的所有消息都可以很好地显示在控制台上。使用_nicely_,我的意思是消息有时间戳,颜色取决于日志级别,错误日志甚至被写入错误输出(php: / / stderr
).现在,您不再需要有条件地处理冗长设置,并且可以在命令和服务中始终使用记录器而不是OutputInterface。您的服务只是像往常一样使用记录器(使用依赖注入注入),而不与控制台耦合。
在Symfony 2.4的标准版本中,默认情况下包含该ob娱乐下载特性公关# 557.您甚至可以自定义行为,如下面的例子所示。与verbosity_levels
您可以选择调整上面提到的详细程度和日志级别之间的映射。在给定的示例中,它还将以普通的详细模式显示通知(而不仅仅是警告)。此外,它将只使用使用自定义记录的消息my_channel通道,它通过自定义格式化程序更改显示样式。另请参阅欧宝官网下载app欲了解更多信息:
12 3 4 5 6 7 8 9 10 11 12 13 14
服务:my_formatter:类:ob娱乐下载Symfony \桥\独白\格式化程序\ ConsoleFormatter参数:-“% % datetime % % % % start_tag设置消息end_tag % % % % % % % % % % % % % % level_name % %额外上下文% % % % % % \ n”独白:处理程序:控制台:类型:控制台verbosity_levels:VERBOSITY_NORMAL:请注意渠道:my_channel格式化程序:my_formatter
我认为这解决了使用控制台命令时的一个常见问题。供你参考,a使用AOP的不同方法马蒂亚斯·诺巴克曾描述过。现在是时候让您的命令对用户和开发人员更加友好了,方法是公开关于正在发生的事情的清晰信息,而不必求助于冗长或肮脏的代码。
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
...
处理程序:
控制台:
类型:流
路径:php: / / STDOUT
不管怎样,不那么复杂就好了。
Hugo Hamon is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now