4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SymfonyでLogチャンネルを変更する方法

Posted at

Symfonyで用いられているMonologには、channelという概念があります。channelはロガーインスタンスに対する識別子で、このchannelを使うとログの出力先や出力形式を適宜変更することができます。

デフォルトのロガーはappというchannelが割り当てられています。

    public function foo(LoggerInterface $logger)
    {
        $logger->info('ok');
    }
var/log/dev.log
[2021-12-16T14:12:10.924725+00:00] app.INFO: ok [] []   # appの部分がchannel

例えば、次のような設定を行うとappチャンネルのほかにfooというチャンネルが作られます。
Slackへ通知を行うslackハンドラーを定義しハンドラーのchannelfooを設定すると、fooチャンネルに流れてきたログはSlackへ流れていきます。
また、mainハンドラーに設定してあるチャンネルは["!event"]ですが、こちらは「eventチャンネル以外」を意味するので、fooチャンネルの内容もデフォルトのファイル出力の対象となります。

config/dev/monolog.yaml
monolog:
    channels: ['foo']
    handlers:
        main:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
            channels: ["!event"]
        slack:
            type: slack
            token: xxxxxxxx
            channel: xxxxxxxx
            channels: ["foo"]

図で表すと以下のような感じです。

log.png

特定のチャンネルに設定されたロガーを取得するには、LoggerInterfaceをDIするときに引数の名前を$<チャンネル名>lLoggerにします。fooチャンネルのロガーを取得する場合はこのようになります。

    public function foo(LoggerInterface $fooLogger)
    {
        $fooLogger->info('ok');
    }

なんともPHPらしくて趣がありますね()。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?