LoginSignup
35
25

More than 3 years have passed since last update.

Docker前提のLaravelログ設定

Last updated at Posted at 2019-07-30

概要

Laravelでのログ設定についてまとめした。

  • この記事のゴール
    • 任意のログを stdout で書き出す

最終的にDockerコンテナのログを書き出すことを前提にしてるため、stdoutのみに焦点を当てています。

Laravelには上記のゴール以外にも、ログをファイルに書き出したり、Slackに通知するよう設定できます。

詳しく知りたい方は以下のリンクをご覧ください。

※監視ド素人が書いたものですので、間違い等ありましたらご指摘いただけると幸いです!

目次

  1. ログ設定
  2. ログレベル
  3. なにをログとして書き出すか

1. ログ設定

設定ファイル

Laraveのログシステム設定には、config/logging.phpを使用します(デフォルトで存在します)。
基本的にこのファイルしか触りません。

ファイルにはチャンネルという単位で設定が記述されており、
デフォルトではstackチャンネルが使用されます。

以下は設定例です。

// logging.php
<?php

use Monolog\\Handler\\StreamHandler;

return [
    // デフォルトでstackチャンネルを使用
    'default' => env('LOG_CHANNEL', 'stack'),  

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['stdout'], // stdoutチャンネルを使用
      ],

        'stdout' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stdout',
            ],
            'level' => 'debug',
      ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 7,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => 'critical',
        ],

        'stderr' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stderr',
            ],
        ],

        'syslog' => [
            'driver' => 'syslog',
            'level' => 'debug',
        ],

        'errorlog' => [
            'driver' => 'errorlog',
            'level' => 'debug',
        ],
]

用途に合わせてチャンネルを使っていくのですが、
今回は stdoutのみなので、設定は上記のままでOKです。

2. ログレベル

ログには重要度などで分類されたレベルがあります。

  • emergency
  • alert
  • critical
  • error
  • warning
  • notice
  • info
  • debug

上から高→低レベルです。

各チャンネルでは、levelオプションで指定されたレベル以上のログが書き出されます。

'stdout' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stdout',
            ],
                // debugは最低レベルなので全レベルのログを書き出す
            'level' => 'debug', 
      ],

logging.phpでの設定は以上です。

あとは各処理にログを仕込んでいきます。

// 本家HPより引用
<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 指定したユーザーのプロファイルを表示
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        Log::info('Showing user profile for user: '.$id);

        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}
// 各レベルの書き出し方
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);

※引用元:ログ 5.7 Laravel

3. なにをログとして書き出すか

ログを残す目的は大きく分けて2つ。

  1. 障害発生時、原因究明の手がかりとする
  2. 改善に役立てる

主にひとつ目の目的が大きいです。
どこで問題が起きたか、なにが問題となったか等を知るため、各処理にたいしてログを残すことが必要です。

ただし、すべての処理に対してログを差し込むのは大変ですし、すんごい小さな処理にまでログを残してると、本当に必要なログが埋もれてしまいます。

まずはリクエストごと、コントローラの各処理を1単位として、
あとは必要に応じてログを残すようにします。

どんなログを残すか

ここはログ設計指針 - Qiitaから引用させていただきます。

  • INFOリクエスト開始時 - 処理概要、実行クラス名、メソッド名
  • INFO途中経過 - 実行条件、処理対象オブジェクトのキーとなる値等(customer_id, order_id 等)
  • INFO処理終了時 - 実行結果(OK/NG 等)、リダイレクト先
  • WARNイベント発生時 - 画面に表示したエラーメッセージ等
  • ERROR例外発生時 - 例外クラス、例外メッセージ
  • INFOその他、必要に応じて

おわりに

Laravelのログ設定はlogging.phpのみで完結してて取っつきやすく、デフォルトでslack通知にも対応してたり(使わないけど)パワフルで良いですね。

次はDockerでのログの扱いについてまとめます。

参考

35
25
1

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
35
25