LoginSignup
52
48

More than 3 years have passed since last update.

Laravel ログを出力する

Last updated at Posted at 2021-03-30

環境

  • PHP: 8.0.2
  • Laravel: 8.34.0

ログ関連記事

ログの基本

logger('test', ['foo' => 'bar']);

ログの関数は、第一引数にメッセージ、第二引数にコンテキストを指定します。

[2021-04-01 00:00:00] local.DEBUG: test {"foo":"bar"} 

ログのフォーマットとして下記のように出力されます。

[YYYY-MM-DD HH:II:SS] 環境.ログレベル: メッセージ コンテキスト

補足: 第一引数のメッセージ

第一引数にメッセージには、JsonableArrayableの実装クラスか__toString()を実装済みのクラス、もしくは配列を受け取れます

補足: コンテキスト

logger('test', ['file' => __FILE__, 'line' => __LINE__]);

コンテキストでマジック定数などを指定するとより詳しいデバッグログを出力できて便利です。

[2021-04-01 00:00:00] local.DEBUG: test {"file":"/work/backend/app/Http/Controllers/WelcomeController.php","line":14} 

ヘルパーでログ出力する

一番簡単な方法です。

logger('test', ['foo' => 'bar']);
info('test', ['foo' => 'bar']);
logs()->notice('test', ['foo' => 'bar']);
logs()->warning('test', ['foo' => 'bar']);
logs()->error('test', ['foo' => 'bar']);
logs()->critical('test', ['foo' => 'bar']);
logs()->alert('test', ['foo' => 'bar']);
logs()->emergency('test', ['foo' => 'bar']);

ログの関数は、第一引数にログメッセージ、第二引数にコンテキストを指定します。

[2021-04-01 00:00:00] local.DEBUG: test {"foo":"bar"} 
[2021-04-01 00:00:00] local.INFO: test {"foo":"bar"} 
[2021-04-01 00:00:00] local.NOTICE: test {"foo":"bar"} 
[2021-04-01 00:00:00] local.WARNING: test {"foo":"bar"} 
[2021-04-01 00:00:00] local.ERROR: test {"foo":"bar"} 
[2021-04-01 00:00:00] local.CRITICAL: test {"foo":"bar"} 
[2021-04-01 00:00:00] local.ALERT: test {"foo":"bar"} 
[2021-04-01 00:00:00] local.EMERGENCY: test {"foo":"bar"} 

ファサードでログ出力する

use Illuminate\Support\Facades\Log;
use Log; // エイリアスでも可

Log::debug('test', ['foo' => 'bar']);
Log::info('test', ['foo' => 'bar']);
Log::notice('test', ['foo' => 'bar']);
Log::warning('test', ['foo' => 'bar']);
Log::error('test', ['foo' => 'bar']);
Log::critical('test', ['foo' => 'bar']);
Log::alert('test', ['foo' => 'bar']);
Log::emergency('test', ['foo' => 'bar']);

DIでログ出力する

WelcomeController.php でロガーをDIする例をご紹介します。

app/Http/Controllers/WelcomeController.php
<?php declare(strict_types=1);

namespace App\Http\Controllers;

use Illuminate\View\View;
use Psr\Log\LoggerInterface;

final class WelcomeController extends Controller
{
    /**
     * @param LoggerInterface $logger
     */
    public function __construct(private LoggerInterface $logger) {
    }

    /**
     * @return View
     */
    public function __invoke(): View
    {
        $this->logger->info('test', ['foo' => 'bar']);

        return view('welcome');
    }
}

$logger には、LogServiceProviderにて登録されているLogManagerインスタンスが入っています。

独自Loggerクラスを定義する

フレームワークに依存しないコードを書きたい場合は、こんな感じです。
(ディレクトリ構成に合わせてお使いください。)

app/Logger/AppLogger.php
<?php declare(strict_types=1);

namespace App\Logger;

use Psr\Log\LoggerInterface;

final class AppLogger implements AppLoggerInterface
{
    public function __construct(private LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function info(string $message, array $context = []): void
    {
        $this->logger->info($message, $context);
    }
}
app/Logger/AppLoggerInterface.php
<?php declare(strict_types=1);

namespace App\Logger;

interface AppLoggerInterface
{
    public function info(string $message, array $context = []): void;
}
app/Providers/AppServiceProvider.php
<?php declare(strict_types=1);

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Logger\AppLoggerInterface;
use App\Logger\AppLogger;

final class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->bind(AppLoggerInterface::class, AppLogger::class);
    }
}
app/Http/Controllers/WelcomeController.php
<?php declare(strict_types=1);

namespace App\Http\Controllers;

use App\Logger\AppLoggerInterface;
use Illuminate\View\View;

final class WelcomeController extends Controller
{
    /**
     * @param AppLoggerInterface $logger
     */
    public function __construct(private AppLoggerInterface $logger)
    {
    }

    /**
     * @return View
     */
    public function __invoke(): View
    {
        $this->logger->info('test', ['foo' => 'bar']);

        return view('welcome');
    }
}

補足

PSR-3 Logger Interface

PSR(PHP Standards Recommendations)とは、PHP-FIG(PHP Framework Interop Group)が策定しているPHPコーディング規約を指します。

PSR-3ではロギングライブラリの一般的なインタフェースについて策定されています。
LogManager

52
48
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
52
48