ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP6.0 バージョンのログ変更

ThinkPHP6.0 バージョンのログ変更

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼転載
2019-12-16 13:41:507136ブラウズ

ThinkPHP6.0 バージョンのログ変更

#6.0 のログの類似性は、以前のバージョンに比べて大幅に改善されています。主な新機能は次のとおりです:

·ログ情報のフォーマット

# ·マルチチャネル書き込みサポート

·遅延/リアルタイム書き込み

·ログ情報処理イベント

·ログレベル指定されたチャネル書き込み

· ログ/チャネルのクローズのサポート新しいバージョンのログ クラスの最大の変更点は、複数のログ クラスをサポートすることです。チャネル書き込み、つまり同時に書き込むことができます。または、一部のログ タイプに追加のログ チャネル書き込みを追加します。たとえば、一部の異常なログについては、エラー通知を電子メールに送信することを選択できます。

その他の主な変更点は次のとおりです。

·WEB ログと CLI ログがマージされ、統一された形式にフォーマットされます。

·アクセス情報はデフォルトでは記録されなくなりました。必要に応じて自分で記録できます;

·独立したログも JSON 形式の記録をサポート;ログの関連構成は、config/log.php ファイルで設定できます。この記事では、主に新しいバージョンのログの変更点について説明します。

ログ チャネル

ログ チャネルの概念は、ログ情報のためのログ領域を作成することに相当し、各ログ チャネルのログ情報は独立した書き込みメカニズムまたは構成を採用しています。パラメータを使用すると、ログ情報のデフォルトのログ チャネルを指定したり、チャネル書き込みを動的に切り替えたり、同じログ情報を複数のログ チャネルに同時に書き込むことができます。

ログ構成ファイルのチャネル構成でチャネルを定義できます。デフォルトでは、ファイル チャネルは 1 つだけ定義されています。

// 日志通道列表
'channels'     => [
    'file' => [
        // 日志记录方式
        'type'           => 'File',
        // 日志保存目录
        'path'           => '',
        // 单文件日志写入
        'single'         => false,
        // 独立日志级别
        'apart_level'    => [],
        // 最大日志文件数量
        'max_files'      => 0,
        // 使用JSON格式记录
        'json'           => false,
        // 日志输出格式化
        'format'         => '[%s][%s] %s',
        // 是否实时写入
        'realtime_write' => false,
    ],
    // 其它日志通道配置
],

各ログ チャネルは、ログの書き込み方法を決定する type パラメータを指定する必要があります。ファイルとは、ファイル ログ モードでの書き込みを意味します。他の書き込み方法を指定する必要がある場合は、追加の拡張機能をインストールする必要があります。 。ただし、異なるログ チャネルに同じタイプを指定しても、書き込みパスが異なるなど、他の構成パラメータが異なる場合もあります。

どのようなログ書き込みタイプが使用されるかに関係なく、各ログ チャネルがサポートできる一般的な構成は次のとおりです。

ThinkPHP6.0 バージョンのログ変更レベル パラメーターの使用法は次のとおりです。グローバルログ設定と一致します。コマンドラインモードを除き、デフォルトのログはリクエスト完了後に一度書き込まれます。リアルタイムにログ情報を書き込む必要がある場合は、設定が必要です。

'realtime_write'=>true,

コマンドライン下にある場合は、設定されているかどうかに関係なく、ログはリアルタイムで自動的に書き込まれます。

デフォルト チャネル

デフォルト パラメータを設定して、ログのデフォルト チャネルを定義します。例:

'default'=>'file',

Level channel

さまざまなログ レベルを設定し、さまざまなログ チャネルを使用できます。

'type_channel'=>[
// 对于error日志级别 同时写入file和email两个日志通道
'error'=>['file','email'],
]

レベル チャネルを設定した後、このレベルのログはデフォルト チャネルに記録されないことに注意してください。

ログ チャネルにはログ ドライバーの協力が必要ですが、ログ ドライバーをカスタマイズすることもできます。

チャネルの切り替え

現在のログのデフォルトの書き込みチャネルを手動で切り替えることもできます。例:

Log::channel('email')->info('这是日志信息');

複数のチャネルを使用するための切り替えをサポートします。記録 、例:

Log::channel(['email', 'file'])->info('这是日志信息');

ログ処理

ログ書き込みはイベント監視をサポートします。例:

Event::listen('think\event\LogWrite', function($event) {
    if('file' == $event->channel) {
        $event->log['info'][] = 'test info';
    }
});

クロージャのパラメータは LogWrite です。イベント クラス オブジェクト インスタンス では、次の 2 つの属性を取得できます。

ThinkPHP6.0 バージョンのログ変更ログ情報は、現在のログ チャネルの下のすべてのレベルのログ情報を含む 2 次元配列です (記録されます)。

ログ情報のフォーマット

システムには、ログ情報のフォーマット用の 2 つのパラメータが用意されています。1 つ目は、時間の表示形式をカスタマイズするための time_format です。2 つ目は、フォーマットを調整するためのものです。ログ出力形式のパラメータ。

'channels'    =>    [
    'file'    =>    [
        'type'          => 'file', 
        'json'        =>true
        'file_size'   => 1024*1024*10,    
        'time_format'   =>    'Y-m-d H:i:s',
        'format'        =>    '[%s][%s]:%s',
    ],
],

format パラメータの最初の %s はログ記録時間です (ログ時間の形式は time_format パラメータによって定義されます) 2 番目の %s はログ レベルです 3 番目の %s はログ情報です、順序を調整することはできません。

JSON 形式のログ

は、JSON 形式の記録ファイル ログをサポートできるため、一部のサードパーティのログ分析ツールによるログ分析の実行がより便利になります。

ログ設定ファイルに

return [
    'default'      => 'file',
    'channels'    =>    [
        'file'    =>    [
            'type'          => 'file', 
            'json'        =>true
            'file_size'   => 1024*1024*10,    
        ],
    ],
];

を追加して、JSON 形式のログ記録を有効にします。CLI コマンド ラインのログ記録も有効です。

和之前版本的区别在于,新版的每个日志信息都是一条JSON数据(旧版本是每个请求一条JSON数据)。

关闭日志

你可以通过调用close方法动态关闭日志写入。

// 关闭全局日志写入
Log::close();
// 关闭某个通道日志写入
Log::close('file');

如果调用close方法动态关闭日志,会自动调用clear方法清空日志。

清空日志

一旦执行save方法后,内存中的日志信息就会被自动清空,如果需要提前清空日志可以使用:

// 清空所有日志
Log::clear();
//清空通道日志可以使用
Log::clear('file');

在清空日志方法之前,你可以使用getLog方法获取内存中的日志。

// 获取(默认通道)日志
$logs = Log::getLog();
// 获取指定通道日志
$logs = Log::getLog('file');

日志清空仅仅是清空内存中的日志。

自定义驱动

日志通道需要自定义日志驱动,该日志驱动需要实现think\contract\LogHandlerInterface接口。

interface LogHandlerInterface
{
    /**
     * 日志写入接口
     * @access public
     * @param  array $log 日志信息
     * @return bool
     */
    public function save(array $log): bool;
}

众多ThinkPHP教程,尽在PHP中文网,欢迎在线学习!

本文转自:https://blog.thinkphp.cn/1186947

以上がThinkPHP6.0 バージョンのログ変更の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はthinkphp.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。