我花了几个小时浏览独白文档..但我只是无法弄清楚这个基本问题:独白中如何定义通道?我得到了这个 symfony2 项目,它在
config.yml
文件中有这个:
monolog:
handlers:
api:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%_api_request_raw.log"
channels: api
formatter: monolog.formatter.session_api
api_low:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%_api_request_low.log"
channels: api_low
formatter: monolog.formatter.session_api
car_location:
type: stream
path: "%kernel.logs_dir%/car locations/%kernel.environment%_carLocation_not-recognized.log"
channels: not_recognized
level: %log_debug_level%
formatter: monolog.formatter.session_location
active_request:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%_api_active_request.log"
channels: active_request
level: %log_debug_level%
formatter: monolog.formatter.session_location
get_request:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%_api_get_request.log"
channels: get_request
level: %log_debug_level%
formatter: monolog.formatter.session_location
现在在服务下的同一个文件中我得到了这些:
services:
monolog.formatter.session_location:
class: Monolog\Formatter\LineFormatter
arguments:
- "[%%datetime%%] %%level_name%%: %%message%%\n"
monolog.formatter.session_api:
class: Monolog\Formatter\LineFormatter
arguments:
- "[%%datetime%%] %%channel%%.%%level_name%%: %%message%%\n"
基本上自定义了日志消息..足够公平..
我不理解的是 api_low 是什么意思?它在哪里定义的? api_low 与 api 有何不同?例如,我在这里看到处理程序名称与通道相同(即 api 处理程序有一个 api 通道)..但我不知道该怎么做
如果我简单地放一个
$logger = $this->get("logger");
$logger->debug("hello world");
在我的代码中,我在控制台中收到此日志:
[2014-05-16 15:38:15] app.DEBUG: hello world [] []
我也在控制台中看到了这些:
[2014-05-16 15:38:08] request.INFO: Matched route "sonata_admin_dashboard" (parameters: "_controller": "St\AdminBundle\Controller\DashboardController::dashboardAction", "_route": "sonata_admin_dashboard") [] []
[2014-05-16 15:38:08] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". [] []
[2014-05-16 15:38:08] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". [] []
[2014-05-16 15:38:08] security.DEBUG: Read SecurityContext from the session [] []
[2014-05-16 15:38:08] security.DEBUG: Reloading user from user provider. [] []
[2014-05-16 15:38:08] doctrine.INFO: MongoDB query: {"find":true,"query":{"_id":{"$id":"51c8c071efe5b8dd09000003"},"type":{"$in":["user","client","partner"]}},"fields":[],"db":"smarttaxi_dev","collection":"User"} [] []
[2014-05-16 15:38:08] doctrine.INFO: MongoDB query: {"limit":true,"limitNum":1,"query":{"_id":{"$id":"51c8c071efe5b8dd09000003"},"type":{"$in":["user","client","partner"]}},"fields":[]} [] []
[2014-05-16 15:38:08] doctrine.INFO: MongoDB query: {"limit":true,"limitNum":1,"query":{"_id":{"$id":"51c8c071efe5b8dd09000003"},"type":{"$in":["user","client","partner"]}},"fields":[]} [] []
[2014-05-16 15:38:08] doctrine.INFO: MongoDB query: {"limit":true,"limitNum":1,"query":{"_id":{"$id":"51c8c071efe5b8dd09000003"},"type":{"$in":["user","client","partner"]}},"fields":[]} [] []
[2014-05-16 15:38:08] security.DEBUG: Username "aiia" was reloaded from user provider. [] []
[2014-05-16 15:38:08] event.DEBUG: Notified event "kernel.request" to listener "FOS\RestBundle\EventListener\BodyListener::onKernelRequest". [] []
[2014-05-16 15:38:08] event.DEBUG: Notified event "kernel
其中一些是显而易见的:学说与相关的东西相匹配,但我只是不知道在哪里可以找到这些东西的定义或参考。
换个方式问: api_low 是一个 monolog 定义的特殊键吗?如果是的话,它的文档在哪里?我在所有代码中找不到该字符串的任何实例,所以我假设它是预定义变量,对吗?
不,
api_low
不是一个特殊的键,它是开发人员定义的键,用于分隔日志(并可能以不同的方式管理它们,例如在不同的 *.log 文件中)。
请参阅有关 Monolog 的食谱和如何在服务中使用自定义通道了解更多详细信息。
[编辑:示例]
我假设:
MyService
的服务,它有一个功能 doSomeStuff()
在
service.yml
:
myService.doSomeStuff:
class: MyProject\MyBundle\Service\MyService
arguments: [ "@logger"]
tags:
- { name: monolog.logger, channel: api_low }
在
MyService.php
:
protected $apiLowLogger;
public function __construct($apiLowLogger)
{
$this->apiLowLogger = $apiLowLogger;
}
public function doSomeStuff()
{
$this->apiLowLogger->debug('This debug message will be written in %kernel.logs_dir%/%kernel.environment%_api_request_low.log');
}
要了解不同类型的日志(
debug()
、error()
、info()
等),
请参阅来源(永久链接)。
$logger->info(...)
/$logger->error(...)
,被调用的函数决定日志的日志级别,例如'$logger->info(...)' 日志的日志级别为“info”,'$logger->error(...)' 日志的日志级别为“error”。monolog.yaml
在 YAML 属性 monolog.handlers
,每个处理程序都有一个 type
一个可选的日志级别和由“level”和“channels”指定的可选通道YAML 属性。type
,monolog 有一个 PHP 处理程序类,因此每个处理程序都有自己的业务逻辑,包括日志目标。有些处理程序仅在特定条件下工作,例如“控制台”处理程序仅在代码在 Symfony 命令上下文中运行时输出日志。channels
YAML 属性,来自所有通道的日志将由处理程序处理。如果 channels
属性设置为有效的 YAML 数组,则显式设置或排除一个或多个通道,例如['doctrine']
仅处理 doctrine
通道的日志,['!doctrine']
排除 doctrine
通道并处理来自所有其他通道的日志。log_level
与日志的日志级别匹配,独白处理程序只会将其“转发”到其目的地。如果不指定 level 属性,则将处理所有日志级别的日志。当设置 level
时,monolog 处理程序不仅会转发具有该日志级别的匹配日志,还会转发具有更严重日志级别的日志,例如level: warning
还将记录 error
日志。monolog.channels
中的 monolog.yaml
下显式添加通道,例如channels: ['foo']
并在自动装配的 Symfony 服务参数前添加通道前缀,例如LoggerInterface $fooLogger
仅登录频道 foo
。$logger
,不幸的是没有getter所以我想这需要用调试器来完成。