5
2

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.

Laravelのログフォーマットを変更したらスタックトレースが出力されなくなった

Posted at

#環境

  • PHP 7.4.16
  • Laravel 8.34.0

#何が起きたか
Laravelでログのフォーマットを変更するためにapp/Logging/CustomizeFormatter.phpを以下のように設定しました

class CustomizeFormatter
{
    /**
     * @param  \Illuminate\Log\Logger  $logger
     * @return void
     */
    public function __invoke($logger)
    {
        foreach ($logger->getHandlers() as $handler) {
            $handler->setFormatter(new LineFormatter(
                "%level_name%[%datetime%] url:%extra.url% http_method:%extra.http_method% context:%context% class:%extra.class% function:%extra.function% message:%message% \n",
                'Y-m-d H:i:s',
                true
            ));
            $handler->pushProcessor(new WebProcessor);
            $handler->pushProcessor(new IntrospectionProcessor(Logger::ERROR, ['Illuminate\\']));
        }
    }
}

これによってログのフォーマットの変更と追加情報の出力には成功したのですが、
エラー時にスタックトレースが出力されなくなってしまいました

#解決

LineFormatterクラスは以下のようにスタックトレースを含むか否かを定めるメソッドが存在することがわかりました

public function includeStacktraces(bool $include = true)
    {
        $this->includeStacktraces = $include;
        if ($this->includeStacktraces) {
            $this->allowInlineLineBreaks = true;
        }
    }

なんだ!メソッド呼んだらいいんじゃん!!ということでコードを以下のように書き換えて修正完了です

public function __invoke($logger)
    {
        $format = new LineFormatter(
            "%level_name%[%datetime%] url:%extra.url% http_method:%extra.http_method% context:%context% class:%extra.class% function:%extra.function% message:%message% \n",
            'Y-m-d H:i:s',
            true
        );

        $format->includeStacktraces(true);

        foreach ($logger->getHandlers() as $handler) {
            $handler->setFormatter($format);
            $handler->pushProcessor(new WebProcessor);
            $handler->pushProcessor(new IntrospectionProcessor(Logger::DEBUG, ['Illuminate\\']));
        }
    }

無事にエラー時にはスタックトレースがログに出力されるようになりました。

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?