7

Symfony2とmonologを使用して、定義されたログファイル(mylogfile.log)に特定のログを書き込みます。

#config_dev.yml
monolog:
    handlers:
        main:
           type:  stream
           path:  %kernel.logs_dir%/%kernel.environment%.log
           level: debug
       file:
           type:   stream
           path:   %kernel.logs_dir%/mylogfile.log
           level:  info

コントローラのログファイルに次の方法でアクセスしています。

    $logger = $this->get('logger'); // Log
    $logger->info('somelogcontent');

今私の問題は、私のログファイルにすべての情報レベルが含まれていることです。つまり、すべてのapp.INFOログ(これは私が欲しいものです)とrequest.INFO(私は本当に必要ありません)を私に与えます:

[2012-04-04 11:13:17] request.INFO: Matched route ... blablabla
[2012-04-04 11:13:17] app.INFO: somelogcontent
...

Request.INFOをログに記録しない方法はありますか?

マイク

4

6 に答える 6

10

新しいロガーサービスを作成する必要があります。これをクラスで使用する必要があります。このように、config.yml:

services:
  my_logger:
    class: Monolog\Logger
    arguments: [my_info]
    calls:
        - [pushHandler, [@my_log_handler]]

  my_log_handler:
    class: Monolog\Handler\StreamHandler
    arguments: [%kernel.root_dir%/logs/my_info.log, 100]

使用法(Controllerたとえば):

$this->get('my_logger')->info('info message');

symfonyクックブックの詳細情報。

于 2012-04-04T11:57:25.877 に答える
6

MonologBu​​ndleのバージョン2.4以降(MonologBu​​ndleのリリースサイクルはsymfonyと同期されなくなったことに注意してください)では、サービスを定義せずに、構成を介して非常に簡単に新しいチャネルを定義できるようになりました。

monolog:
    channels: ["my_channel"]
    handlers:
       file:
           type:   stream
           path:   %kernel.logs_dir%/mylogfile.log
           level:  info
           channels: my_channel

次に、コントローラーの新しいチャネル用に自動的に作成されたロガーを取得します。

$logger = $this->get('monolog.logger.my_channel');
$logger->info('somelogcontent');

私は古い質問を知っていますが、からのこの新機能MonologBundle ~2.4について言及する必要があります。

于 2013-11-06T19:03:10.447 に答える
2

ユーザーアラートレベルを使用できます。ファイル:タイプ:ストリームパス:%kernel.logs_dir%/ mylogfile.logレベル:アラート

$logger = $this->get('logger'); // Log
$logger->alert('somelogcontent');
于 2012-04-04T11:27:25.897 に答える
2

このログメッセージは、router_listenerサービスから送信されます。サービス構成ファイルで再定義できます。

メインバンドルconfig/services.ymlで行ったこと:

services:

    # ...

    router_listener:
        class:  %router_listener.class%
        arguments: ['@router', %request_listener.http_port%, %request_listener.https_port%]
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onEarlyKernelRequest }
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

「Matchedroute...」ログメッセージがログに記録されないようにします(RouterListenerのコンストラクター引数にロガーサービスがないため)。

于 2012-04-04T13:03:13.290 に答える
0

config \ packages\monolog.yamlファイルに「app」固有のチャネルを追加します

monolog:
    handlers:
        info:
            type:  rotating_file
            path:  '%kernel.logs_dir%/info_%kernel.environment%_info.log'
            level: info
            max_files: 10
            channels: app

私はsymfony4(または5)を使用します

于 2020-02-16T08:09:35.103 に答える
0

たとえば、handler:testを使用する場合は、モノログ構成を追加します。

test:
    type: filter
    accepted_levels: [info]
    handler: test_info
test_info:
    type: stream // many possibilities(rotating_file..)
    level: info
    path: // the path where you save file log
于 2020-03-18T15:37:34.980 に答える