Readouble

Laravel 11.x ログ

イントロダクションIntroduction

Laravelは、アプリケーション内で何が起こっているかを詳しく知らせるために、メッセージをファイル、システムエラーログ、さらにはSlackに記録してチーム全体に通知できる堅牢なログサービスを提供します。To help you learn more about what's happening within your application, Laravel provides robust logging services that allow you to log messages to files, the system error log, and even to Slack to notify your entire team.

Laravelのログは「チャンネル」に基づいています。各チャンネルは、ログ情報を書き込む特定の方法を表します。たとえば、singleチャンネルはログファイルを単一のログファイルに書き込みますが、slackチャンネルはログメッセージをSlackへ送信します。ログメッセージは、重大度に基づいて複数のチャンネルに書き込まれる場合があります。Laravel logging is based on "channels". Each channel represents a specific way of writing log information. For example, the single channel writes log files to a single log file, while the slack channel sends log messages to Slack. Log messages may be written to multiple channels based on their severity.

内部的にLaravelはMonologライブラリを利用しており、強力なログハンドラを多種に渡りサポートしています。Laravelでは、こうしたハンドラを簡単に設定できるため、ハンドラを組み合わせてアプリケーションのログ処理をカスタマイズできます。Under the hood, Laravel utilizes the Monolog[https://github.com/Seldaek/monolog] library, which provides support for a variety of powerful log handlers. Laravel makes it a cinch to configure these handlers, allowing you to mix and match them to customize your application's log handling.

設定Configuration

アプリケーションのログ動作を制御する、すべての設定オプションは、config/logging.php設定ファイルに格納しています。このファイルでアプリケーションのログチャンネルを設定でき、利用可能なチャンネルとそのオプションのそれぞれを確認してください。以下に、いくつかの一般的なオプションについて説明します。All of the configuration options that control your application's logging behavior are housed in the config/logging.php configuration file. This file allows you to configure your application's log channels, so be sure to review each of the available channels and their options. We'll review a few common options below.

Laravelはメッセージをログに記録するときに、デフォルトでstackチャンネルを使用します。stackチャンネルは、複数のログチャンネルを単一のチャンネルに集約するために使用します。スタックの構築の詳細については、以降のドキュメントを確認してください。By default, Laravel will use the stack channel when logging messages. The stack channel is used to aggregate multiple log channels into a single channel. For more information on building stacks, check out the documentation below[#building-log-stacks].

利用可能なチャンネルドライバAvailable Channel Drivers

各ログチャンネルは「ドライバ」によって駆動されます。ドライバは、ログメッセージが実際に記録される方法と場所を決定します。以下のログチャンネルドライバは、すべてのLaravelアプリケーションで利用できます。これらのドライバのほとんどのエントリは、アプリケーションのconfig/logging.php設定ファイルに予め用意しているため、このファイルを確認して内容をよく理解してください。Each log channel is powered by a "driver". The driver determines how and where the log message is actually recorded. The following log channel drivers are available in every Laravel application. An entry for most of these drivers is already present in your application's config/logging.php configuration file, so be sure to review this file to become familiar with its contents:

名前Name 説明Description
customcustom 指定ファクトリを呼び出してチャンネルを作成するドライバA driver that calls a specified factory to create a channel.
dailydaily 日毎にファイルを切り替えるRotatingFileHandlerベースのMonologドライバA RotatingFileHandler based Monolog driver which rotates daily.
errorlogerrorlog ErrorLogHandlerベースのMonologドライバAn ErrorLogHandler based Monolog driver.
monologmonolog Monologがサポートしているハンドラを使用するMonologファクトリドライバA Monolog factory driver that may use any supported Monolog handler.
papertrailpapertrail SyslogUdpHandlerベースのMonologドライバA SyslogUdpHandler based Monolog driver.
singlesingle 単一のファイルまたはパスベースのロガーチャンネル(StreamHandler)A single file or path based logger channel (StreamHandler).
slackslack SlackWebhookHandlerベースのMonologドライバA SlackWebhookHandler based Monolog driver.
stackstack 「マルチチャンネル」チャンネルの作成を容易にするラッパーA wrapper to facilitate creating "multi-channel" channels.
syslogsyslog SyslogHandlerベースのMonologドライバA SyslogHandler based Monolog driver.

lightbulb Note: 高度なチャンネルのカスタマイズのドキュメントをチェックして、monologおよびcustomドライバの詳細を確認してください。[!NOTE]
Check out the documentation on advanced channel customization[#monolog-channel-customization] to learn more about the monolog and custom drivers.

チャンネル名の設定Configuring the Channel Name

Monologはデフォルトで、現在の環境にマッチする「チャンネル名」でインスタンス化します。この値を変更する場合は、チャネルの設定にnameオプションを追加します。By default, Monolog is instantiated with a "channel name" that matches the current environment, such as production or local. To change this value, you may add a name option to your channel's configuration:

'stack' => [
    'driver' => 'stack',
    'name' => 'channel-name',
    'channels' => ['single', 'slack'],
],

チャンネルの事前設定Channel Prerequisites

singleチャンネルとdailyチャンネルの設定Configuring the Single and Daily Channels

singleチャンネルとdailyチャンネルは、bubblepermissionlockingの3オプションの設定オプションがあります。The single and daily channels have three optional configuration options: bubble, permission, and locking.

名前Name 説明Description デフォルトDefault
bubblebubble メッセージが処理された後、他のチャンネルにバブルアップする必要があるかを示すIndicates if messages should bubble up to other channels after being handled. truetrue
lockinglocking ログファイルに書き込む前に、ログファイルのロックを試みるかを示すAttempt to lock the log file before writing to it. falsefalse
permissionpermission ログファイルのパーミッションThe log file's permissions. 06440644

さらに、LOG_DAILY_DAYS環境変数、またはdays設定オプションを設定することで、dailyチャンネルの保持ポリシーを設定できます。Additionally, the retention policy for the daily channel can be configured via the LOG_DAILY_DAYS environment variable or by setting the days configuration option.

名前Name 説明Description デフォルトDefault
daysdays デイリーログファイルを保持する日数The number of days that daily log files should be retained. 1414

Papertrailチャンネルの設定Configuring the Papertrail Channel

papertrailチャネルは、hostportの設定オプションが必要です。これらはPAPERTRAIL_URLPAPERTRAIL_PORT環境変数で定義できます。これらの値はPapertrailから取得できます。The papertrail channel requires host and port configuration options. These may be defined via the PAPERTRAIL_URL and PAPERTRAIL_PORT environment variables. You can obtain these values from Papertrail[https://help.papertrailapp.com/kb/configuration/configuring-centralized-logging-from-php-apps/#send-events-from-php-app].

Slackチャンネルの設定Configuring the Slack Channel

slackチャネルには、url設定オプションが必要です。この値はLOG_SLACK_WEBHOOK_URL環境変数で定義します。このURLは、Slackチーム用に設定した受信WebフックのURLと一致する必要があります。The slack channel requires a url configuration option. This value may be defined via the LOG_SLACK_WEBHOOK_URL environment variable. This URL should match a URL for an incoming webhook[https://slack.com/apps/A0F7XDUAZ-incoming-webhooks] that you have configured for your Slack team.

Slackはデフォルトで、criticalレベル以上のログしか受け取りません。しかしLOG_LEVEL環境変数を使うか、Slackのログチャンネルの設定配列内のlevel設定オプションを変更することで調整できます。By default, Slack will only receive logs at the critical level and above; however, you can adjust this using the LOG_LEVEL environment variable or by modifying the level configuration option within your Slack log channel's configuration array.

廃止ワーニングのログLogging Deprecation Warnings

PHPやLaravelなどのライブラリは、機能の一部が非推奨となり、将来のバージョンで削除されることをユーザーへ通知することがよくあります。このような非推奨の警告をログに記録したい場合は、LOG_DEPRECATIONS_CHANNEL環境変数を使用するか、アプリケーションのconfig/logging.php設定ファイル内で、好みのdeprecationsログチャンネルを指定してください。PHP, Laravel, and other libraries often notify their users that some of their features have been deprecated and will be removed in a future version. If you would like to log these deprecation warnings, you may specify your preferred deprecations log channel using the LOG_DEPRECATIONS_CHANNEL environment variable, or within your application's config/logging.php configuration file:

'deprecations' => [
    'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
    'trace' => env('LOG_DEPRECATIONS_TRACE', false),
],

'channels' => [
    // ...
]

あるいは、deprecationsという名前のログチャンネルを定義することもできます。この名前のログチャンネルが存在する場合、常にdeprecationsのログを記録するために使用されます。Or, you may define a log channel named deprecations. If a log channel with this name exists, it will always be used to log deprecations:

'channels' => [
    'deprecations' => [
        'driver' => 'single',
        'path' => storage_path('logs/php-deprecation-warnings.log'),
    ],
],

ログスタックの構築Building Log Stacks

前述のように、stackドライバを使用すると、便利に複数のチャンネルを1つのログチャンネルに組み合わせることができます。ログスタックの使用方法を説明するために、本番アプリケーションで使われる可能性のある構成例を見てみましょう。As mentioned previously, the stack driver allows you to combine multiple channels into a single log channel for convenience. To illustrate how to use log stacks, let's take a look at an example configuration that you might see in a production application:

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['syslog', 'slack'], // [tl! add]
        'ignore_exceptions' => false,
    ],

    'syslog' => [
        'driver' => 'syslog',
        'level' => env('LOG_LEVEL', 'debug'),
        'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
        'replace_placeholders' => true,
    ],

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

この構成を分析してみましょう。まず、stackチャンネルがchannelsオプションを介して他の2つのチャンネルsyslogslackを集約している点に注目してください。したがって、メッセージをログに記録するとき、これらのチャンネルの両方にメッセージをログに記録する機会があります。ただし、以降で説明するように、これらのチャンネルが実際にメッセージをログに記録するかどうかは、メッセージの重大度/「レベル」によって決定されます。Let's dissect this configuration. First, notice our stack channel aggregates two other channels via its channels option: syslog and slack. So, when logging messages, both of these channels will have the opportunity to log the message. However, as we will see below, whether these channels actually log the message may be determined by the message's severity / "level".

ログレベルLog Levels

上記の例のsyslogおよびslackチャンネル設定に存在するlevel設定オプションに注意してください。このオプションは、チャンネルによってログに記録されるためにメッセージが必要とする最小の「レベル」を決定します。Laravelのログサービスを強化するMonologは、RFC5424仕様で定義されているすべてのログレベルを提供しています。これらのログレベルは、重要度の高い順に、emergencyalertcriticalerrorwarningnoticeinfodebugです。Take note of the level configuration option present on the syslog and slack channel configurations in the example above. This option determines the minimum "level" a message must be in order to be logged by the channel. Monolog, which powers Laravel's logging services, offers all of the log levels defined in the RFC 5424 specification[https://tools.ietf.org/html/rfc5424]. In descending order of severity, these log levels are: emergency, alert, critical, error, warning, notice, info, and debug.

では、debugメソッドを使用してメッセージをログに記録してみましょう。So, imagine we log a message using the debug method:

Log::debug('An informational message.');

前記の設定により、syslogチャンネルはメッセージをシステムログに書き込みます。ただし、エラーメッセージはcritical以上ではないため、Slackには送信されません。ただし、emergencyメッセージをログに記録すると、emergencyレベルが両方のチャンネルの最小レベルしきい値を超えるため、システムログとSlackの両方に送信されます。Given our configuration, the syslog channel will write the message to the system log; however, since the error message is not critical or above, it will not be sent to Slack. However, if we log an emergency message, it will be sent to both the system log and Slack since the emergency level is above our minimum level threshold for both channels:

Log::emergency('The system is down!');

ログメッセージの書き込みWriting Log Messages

Logファサードを使用してログに情報を書き込むことができます。前述のように、ロガーはRFC5424仕様で定義されている8つのログレベルを提供しますemergencyalertcriticalerrorwarningnoticeinfodebugYou may write information to the logs using the Log facade[/docs/{{version}}/facades]. As previously mentioned, the logger provides the eight logging levels defined in the RFC 5424 specification[https://tools.ietf.org/html/rfc5424]: emergency, alert, critical, error, warning, notice, info and debug:

use Illuminate\Support\Facades\Log;

Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);

これらのメソッドのいずれかを呼び出して、対応するレベルのメッセージをログに記録できます。デフォルトでは、メッセージはlogging設定ファイル中に設定しているデフォルトのログチャンネルに書き込まれます。You may call any of these methods to log a message for the corresponding level. By default, the message will be written to the default log channel as configured by your logging configuration file:

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller
{
    /**
     * 特定のユーザーのプロファイルの表示
     */
    public function show(string $id): View
    {
        Log::info('Showing the user profile for user: {id}', ['id' => $id]);

        return view('user.profile', [
            'user' => User::findOrFail($id)
        ]);
    }
}

コンテキスト情報Contextual Information

コンテキストデータの配列をlogメソッドへ渡せます。このコンテキストデータはフォーマットされ、ログメッセージとともに表示されます。An array of contextual data may be passed to the log methods. This contextual data will be formatted and displayed with the log message:

use Illuminate\Support\Facades\Log;

Log::info('User {id} failed to login.', ['id' => $user->id]);

特定のチャンネルで、後に続くすべてのログエントリに含まれるコンテキスト情報を指定したい場合もあるでしょう。例えば、アプリケーションに入ってくる各リクエストに関連付けたリクエストIDをログに記録したい場合があります。これを行うには、LogファサードのwithContextメソッドを呼び出します。Occasionally, you may wish to specify some contextual information that should be included with all subsequent log entries in a particular channel. For example, you may wish to log a request ID that is associated with each incoming request to your application. To accomplish this, you may call the Log facade's withContext method:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use Symfony\Component\HttpFoundation\Response;

class AssignRequestId
{
    /**
     * 受信リクエストの処理
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        $requestId = (string) Str::uuid();

        Log::withContext([
            'request-id' => $requestId
        ]);

        $response = $next($request);

        $response->headers->set('Request-Id', $requestId);

        return $response;
    }
}

すべてのログチャンネルでコンテキスト情報を共有したい場合は、Log::shareContext()メソッドを呼び出します。このメソッドは、作成したすべてのチャンネルと、その後に作成したすべてのチャンネルへ、コンテキスト情報を提供します。If you would like to share contextual information across all logging channels, you may invoke the Log::shareContext() method. This method will provide the contextual information to all created channels and any channels that are created subsequently:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use Symfony\Component\HttpFoundation\Response;

class AssignRequestId
{
    /**
     * 受信リクエストの処理
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        $requestId = (string) Str::uuid();

        Log::shareContext([
            'request-id' => $requestId
        ]);

        // ...
    }
}

lightbulb Note: キュー投入したジョブの処理中にログコンテキストを共有する必要がある場合は、ジョブミドルウェアを利用してください。[!NOTE]
If you need to share log context while processing queued jobs, you may utilize job middleware[/docs/{{version}}/queues#job-middleware].

特定チャンネルへの書き込みWriting to Specific Channels

アプリケーションのデフォルトチャンネル以外のチャンネルにメッセージを記録したいことも起きるでしょう。Logファサードのchannelメソッドを使用して、設定ファイルで定義している任意のチャンネルを取得し、ログへ記録できます。Sometimes you may wish to log a message to a channel other than your application's default channel. You may use the channel method on the Log facade to retrieve and log to any channel defined in your configuration file:

use Illuminate\Support\Facades\Log;

Log::channel('slack')->info('Something happened!');

複数のチャンネルで構成されるログスタックをオンデマンドで作成する場合は、stackメソッドを使用できます。If you would like to create an on-demand logging stack consisting of multiple channels, you may use the stack method:

Log::stack(['single', 'slack'])->info('Something happened!');

オンデマンドチャンネルOn-Demand Channels

アプリケーションの logging 設定ファイルに設定を用意しなくても、実行時に構成を指定することにより、オンデマンドチャンネルを作成することも可能です。そのためには、設定の配列をLogファサードのbuildメソッドに渡してください。It is also possible to create an on-demand channel by providing the configuration at runtime without that configuration being present in your application's logging configuration file. To accomplish this, you may pass a configuration array to the Log facade's build method:

use Illuminate\Support\Facades\Log;

Log::build([
  'driver' => 'single',
  'path' => storage_path('logs/custom.log'),
])->info('Something happened!');

オンデマンドチャンネルをオンデマンドログスタックに含めたい場合もあるでしょう。これを実現するには、stackメソッドに渡す配列へオンデマンドチャンネルのインスタンスを含めます。You may also wish to include an on-demand channel in an on-demand logging stack. This can be achieved by including your on-demand channel instance in the array passed to the stack method:

use Illuminate\Support\Facades\Log;

$channel = Log::build([
  'driver' => 'single',
  'path' => storage_path('logs/custom.log'),
]);

Log::stack(['slack', $channel])->info('Something happened!');

monologチャンネルカスタマイズMonolog Channel Customization

チャンネル向けMonologカスタマイズCustomizing Monolog for Channels

場合によっては、既存のチャンネルに対してMonologを設定する方法を完全に制御する必要が起きます。たとえば、Laravelの組み込みのsingleチャンネル用にカスタムMonolog FormatterInterface実装を設定したい場合です。Sometimes you may need complete control over how Monolog is configured for an existing channel. For example, you may want to configure a custom Monolog FormatterInterface implementation for Laravel's built-in single channel.

このためには、チャンネルの設定でtap配列を定義します。tap配列には、Monologインスタンスの作成後にカスタマイズする(またはtap into:入れ込む)機会が必要なクラスのリストを含める必要があります。これらのクラスを配置する決まった場所はないため、アプリケーション内にこれらのクラスを含むディレクトリを自由に作成できます。To get started, define a tap array on the channel's configuration. The tap array should contain a list of classes that should have an opportunity to customize (or "tap" into) the Monolog instance after it is created. There is no conventional location where these classes should be placed, so you are free to create a directory within your application to contain these classes:

'single' => [
    'driver' => 'single',
    'tap' => [App\Logging\CustomizeFormatter::class],
    'path' => storage_path('logs/laravel.log'),
    'level' => env('LOG_LEVEL', 'debug'),
    'replace_placeholders' => true,
],

チャンネルでtapオプションを設定したら、Monologインスタンスをカスタマイズするクラスを定義する準備が整います。このクラスに必要なメソッドは1つだけです。__invokeIlluminate\Log\Loggerインスタンスを受け取ります。Illuminate\Log\Loggerインスタンスは、基礎となるMonologインスタンスへのすべてのメソッド呼び出しをプロキシします。Once you have configured the tap option on your channel, you're ready to define the class that will customize your Monolog instance. This class only needs a single method: __invoke, which receives an Illuminate\Log\Logger instance. The Illuminate\Log\Logger instance proxies all method calls to the underlying Monolog instance:

<?php

namespace App\Logging;

use Illuminate\Log\Logger;
use Monolog\Formatter\LineFormatter;

class CustomizeFormatter
{
    /**
     * 指定するロガーインスタンスをカスタマイズ
     */
    public function __invoke(Logger $logger): void
    {
        foreach ($logger->getHandlers() as $handler) {
            $handler->setFormatter(new LineFormatter(
                '[%datetime%] %channel%.%level_name%: %message% %context% %extra%'
            ));
        }
    }
}

lightbulb Note: すべての「tap」クラスはサービスコンテナによって解決されるため、必要なコンストラクターの依存関係は自動的に依存注入されます。[!NOTE]
All of your "tap" classes are resolved by the service container[/docs/{{version}}/container], so any constructor dependencies they require will automatically be injected.

Monolog処理チャンネルの作成Creating Monolog Handler Channels

Monologにはさまざまな利用可能なハンドラがあり、Laravelはそれぞれに対する組み込みチャンネルを用意していません。場合によっては、対応するLaravelログドライバを持たない特定のMonologハンドラの単なるインスタンスであるカスタムチャンネルを作成したい場合があります。これらのチャンネルは、monologドライバを使用して簡単に作成できます。Monolog has a variety of available handlers[https://github.com/Seldaek/monolog/tree/main/src/Monolog/Handler] and Laravel does not include a built-in channel for each one. In some cases, you may wish to create a custom channel that is merely an instance of a specific Monolog handler that does not have a corresponding Laravel log driver. These channels can be easily created using the monolog driver.

monologドライバを使用する場合、handler設定オプションを使用してインスタンス化するハンドラを指定します。オプションで、ハンドラが必要とするコンストラクターパラメータは、with設定オプションを使用して指定できます。When using the monolog driver, the handler configuration option is used to specify which handler will be instantiated. Optionally, any constructor parameters the handler needs may be specified using the with configuration option:

'logentries' => [
    'driver'  => 'monolog',
    'handler' => Monolog\Handler\SyslogUdpHandler::class,
    'with' => [
        'host' => 'my.logentries.internal.datahubhost.company.com',
        'port' => '10000',
    ],
],

MonologフォーマッターMonolog Formatters

monologドライバを使用する場合、MonologLineFormatterがデフォルトのフォーマッターとして使用されます。ただし、formatterおよびformatter_with設定オプションを使用して、ハンドラへ渡すフォーマッタータイプをカスタマイズできます。When using the monolog driver, the Monolog LineFormatter will be used as the default formatter. However, you may customize the type of formatter passed to the handler using the formatter and formatter_with configuration options:

'browser' => [
    'driver' => 'monolog',
    'handler' => Monolog\Handler\BrowserConsoleHandler::class,
    'formatter' => Monolog\Formatter\HtmlFormatter::class,
    'formatter_with' => [
        'dateFormat' => 'Y-m-d',
    ],
],

独自のフォーマッターを提供できるMonologハンドラを使用している場合は、formatter構成オプションの値をdefaultに設定できます。If you are using a Monolog handler that is capable of providing its own formatter, you may set the value of the formatter configuration option to default:

'newrelic' => [
    'driver' => 'monolog',
    'handler' => Monolog\Handler\NewRelicHandler::class,
    'formatter' => 'default',
],

Monolog ProcessorsMonolog Processors

Monologは、メッセージをログに記録する前に処理することもできます。独自のプロセッサを作成したり、Monologが提供する既存のプロセッサを使用したりできます。Monolog can also process messages before logging them. You can create your own processors or use the existing processors offered by Monolog[https://github.com/Seldaek/monolog/tree/main/src/Monolog/Processor].

monologドライバのプロセッサをカスタマイズしたい場合は、チャネルの設定へprocessors設定値を追加してください。If you would like to customize the processors for a monolog driver, add a processors configuration value to your channel's configuration:

 'memory' => [
     'driver' => 'monolog',
     'handler' => Monolog\Handler\StreamHandler::class,
     'with' => [
         'stream' => 'php://stderr',
     ],
     'processors' => [
         // シンプルな記法
         Monolog\Processor\MemoryUsageProcessor::class,

         // 使用するオプション
         [
            'processor' => Monolog\Processor\PsrLogMessageProcessor::class,
            'with' => ['removeUsedContextFields' => true],
        ],
     ],
 ],

ファクトリによるカスタムチャンネルの生成Creating Custom Channels via Factories

Monologのインスタンス化と設定を完全に制御する、完全なカスタムチャンネルを定義する場合は、config/logging.php設定ファイルでcustomドライバタイプを指定します。設定には、Monologインスタンスを作成するために呼び出すファクトリクラスの名前を含むviaオプションを含める必要があります。If you would like to define an entirely custom channel in which you have full control over Monolog's instantiation and configuration, you may specify a custom driver type in your config/logging.php configuration file. Your configuration should include a via option that contains the name of the factory class which will be invoked to create the Monolog instance:

'channels' => [
    'example-custom-channel' => [
        'driver' => 'custom',
        'via' => App\Logging\CreateCustomLogger::class,
    ],
],

customドライバチャンネルを設定したら、Monologインスタンスを作成するクラスを定義する準備が整います。このクラスには、Monologロガーインスタンスを返す単一の__invokeメソッドのみが必要です。このメソッドは、チャンネル設定配列を唯一の引数として受け取ります。Once you have configured the custom driver channel, you're ready to define the class that will create your Monolog instance. This class only needs a single __invoke method which should return the Monolog logger instance. The method will receive the channels configuration array as its only argument:

<?php

namespace App\Logging;

use Monolog\Logger;

class CreateCustomLogger
{
    /**
     * カスタムMonologインスタンスの生成
     */
    public function __invoke(array $config): Logger
    {
        return new Logger(/* ... */);
    }
}

Pailを使用したログの限定出力Tailing Log Messages Using Pail

多くの場合リアルタイムで、アプリケーションのログを限定し出力する必要が起きるでしょう。例えば、問題をデバッグするときや、特定の種類のエラーについてアプリケーションのログを監視するときなどです。Often you may need to tail your application's logs in real time. For example, when debugging an issue or when monitoring your application's logs for specific types of errors.

Laravel Pail(ペール:バケツ、手杓)は、Laravelアプリケーションのログファイルにコマンドラインから直接簡単にアクセスできるパッケージです。標準のtailコマンドとは異なり、PailはSentryやFlareを含むあらゆるログドライバで動作するように設計されています。さらにPailは、探しているログをすぐに見つけのに役立つ、便利なフィルタのセットを用意しています。Laravel Pail is a package that allows you to easily dive into your Laravel application's log files directly from the command line. Unlike the standard tail command, Pail is designed to work with any log driver, including Sentry or Flare. In addition, Pail provides a set of useful filters to help you quickly find what you're looking for.

インストールInstallation

warning Warning! Laravel Pail requires PHP 8.2+ and the PCNTL extension.[!WARNING]
Laravel Pail requires PHP 8.2+[https://php.net/releases/] and the PCNTL[https://www.php.net/manual/en/book.pcntl.php] extension.

使用開始するには、Composerパッケージマネージャを使い、プロジェクトにPailをインストールしてください。To get started, install Pail into your project using the Composer package manager:

composer require laravel/pail

使用法Usage

ログを限定出力するには、pailコマンドを実行します。To start tailing logs, run the pail command:

php artisan pail

出力の冗長性を許し、切り捨て(...)を回避するには、-vオプションを使用します。To increase the verbosity of the output and avoid truncation (…), use the -v option:

php artisan pail -v

冗長を最大限許し、例外スタックトレースを表示するには、-vv オプションを使用してください。For maximum verbosity and to display exception stack traces, use the -vv option:

php artisan pail -vv

To stop tailing logs, press Ctrl+C at any time.To stop tailing logs, press Ctrl+C at any time.

ログのフィルタリングFiltering Logs

--filter--filter

--filterオプションを使うと、ログのタイプ、ファイル、メッセージ、スタックトレースの内容でログをフィルタリングできます。You may use the --filter option to filter logs by their type, file, message, and stack trace content:

php artisan pail --filter="QueryException"

--message--message

ログのメッセージのみをフィルタリングするには、--message オプションを使います。To filter logs by only their message, you may use the --message option:

php artisan pail --message="User created"

--level--level

logレベルlにより、ログをフィルタリングするには、--levelオプションを使います。The --level option may be used to filter logs by their log level[#log-levels]:

php artisan pail --level=error

--user--user

指定するユーザーが認証されている間に書き込まれたログだけを表示するには、--userオプションへそのユーザーのIDを指定します。To only display logs that were written while a given user was authenticated, you may provide the user's ID to the --user option:

php artisan pail --user=1

章選択

設定

明暗テーマ
light_mode
dark_mode
brightness_auto システム設定に合わせる
テーマ選択
photo_size_select_actual デフォルト
photo_size_select_actual モノクローム(白黒)
photo_size_select_actual Solarized風
photo_size_select_actual GitHub風(青ベース)
photo_size_select_actual Viva(黄緑ベース)
photo_size_select_actual Happy(紫ベース)
photo_size_select_actual Mint(緑ベース)
コードハイライトテーマ選択

明暗テーマごとに、コードハイライトのテーマを指定できます。

テーマ配色確認
スクリーン表示幅
640px
80%
90%
100%

768px以上の幅があるときのドキュメント部分表示幅です。

インデント
無し
1rem
2rem
3rem
原文確認
原文を全行表示
原文を一行ずつ表示
使用しない

※ 段落末のEボタンへカーソルオンで原文をPopupします。

Diff表示形式
色分けのみで区別
行頭の±で区別
削除線と追記で区別

※ [tl!…]形式の挿入削除行の表示形式です。

テストコード表示
両コード表示
Pestのみ表示
PHPUnitのみ表示
OS表示
全OS表示
macOSのみ表示
windowsのみ表示
linuxのみ表示
和文変換

対象文字列と置換文字列を半角スペースで区切ってください。(最大5組各10文字まで)

本文フォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

コードフォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

保存内容リセット

localStrageに保存してある設定項目をすべて削除し、デフォルト状態へ戻します。

ヘッダー項目移動

キーボード操作