4

私はモノログのドキュメントを読むのに数時間を費やしました..そして、この基本的な質問を理解できませんでした.モノログでチャネルはどのように定義されていますか? ファイルにこれを含むこの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

それらのいくつかは明白です: doctrine は関連するものと一致しますが、これらの定義や参照がどこにあるのかわかりません。

別の方法で尋ねられました: api_low は monolog で定義された特別なキーですか? もしそうなら、そのドキュメントはどこにありますか? すべてのコードでこの文字列のインスタンスを見つけることができなかったので、事前定義された変数であると想定していますか?

4

1 に答える 1

5

いいえ、api_low特別なキーではありません。ログを分離するための開発者定義のキーです (そして、異なる *.log ファイルなど、異なる方法でログを管理する可能性があります)。

詳細については、Monolog に関するクックブックおよびサービスでカスタム チャネルを使用する方法を参照してください。

[編集:例]

私はそれを仮定します:

  • config.yml は元の投稿に記載されているとおりです
  • MyService機能を持つサービスが呼び出されましたdoSomeStuff()
  • Symfony のサービスの概念に精通している

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()など) については、ソース(パーマリンク) を参照してください。

于 2014-05-16T13:22:58.007 に答える