我花了好几个小时翻阅了monolog文档..我只是无法弄清楚这个基本问题:如何在monolog中定义通道?我在config.yml
文件中得到了这个symfony2项目:
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有什么不同?我在这里看到例如处理程序名称与通道相同(即api处理程序有api通道)..但我不知道该怎么做它</ p>
如果我只是放一个
$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定义的特殊键吗?如果是的话,它的文件在哪里?我无法在所有代码中找到此字符串的任何实例,因此我假设它是预定义的变量吗?
答案 0 :(得分:2)
不,api_low
不是一个特殊的密钥,它是一个开发人员定义的密钥,用于分隔日志(并可能以不同的方式管理它们,例如在不同的* .log文件中)。
有关详细信息,请参阅Cookbook about Monolog和How to use a custom channel in a service。
[编辑:示例]
我认为:
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()
等),请参阅this page。