Heim  >  Artikel  >  PHP-Framework  >  Protokolländerungen in der ThinkPHP6.0-Version

Protokolländerungen in der ThinkPHP6.0-Version

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼nach vorne
2019-12-16 13:41:507221Durchsuche

Protokolländerungen in der ThinkPHP6.0-Version

Die Protokollanalogie von 6.0 ist gegenüber der Vorgängerversion deutlich verbessert. Zu den wichtigsten neuen Funktionen gehören:

· Formatierung der Protokollinformationen

·Multi-Channel-Schreibunterstützung

·Verzögerung /Echtzeit-Schreiben

·Informationsverarbeitungsereignis protokollieren

·Protokollebene angegeben Kanalschreiben

·Unterstützt das Schließen von Protokollen/Kanälen

Die größte Änderung in der neuen Version der Protokollklasse besteht darin, dass sie Mehrkanal unterstützt Schreiben, was bedeutet, dass Sie gleichzeitig schreiben können. Oder Sie können einigen Protokolltypen zusätzliche Protokollkanäle hinzufügen. Beispielsweise können Sie für einige abnormale Protokolle festlegen, dass Fehlerbenachrichtigungen per E-Mail gesendet werden.

Weitere Änderungen umfassen hauptsächlich:

·WEB-Protokolle und CLI-Protokolle werden zusammengeführt und formatiert;

·Zugriffsinformationen werden nicht mehr standardmäßig aufgezeichnet, Sie können sie bei Bedarf selbst aufzeichnen

·Unabhängige Protokolle unterstützt auch das JSON-Format Record;

Die entsprechende Konfiguration des Protokolls kann in der Datei config/log.php festgelegt werden. Dieser Artikel beschreibt hauptsächlich die Änderungen in der neuen Version des Protokolls.

Protokollkanal

Das Konzept des Protokollkanals entspricht der Erstellung eines Protokollraums für Protokollinformationen. Die Protokollinformationen jedes Protokollkanals übernehmen einen unabhängigen Schreibmechanismus oder eine unabhängige Konfiguration Mit den Parametern können Sie den Standardprotokollkanal für Protokollinformationen angeben oder das Schreiben des Kanals dynamisch umschalten und das gleichzeitige Schreiben derselben Protokollinformationen in mehrere Protokollkanäle unterstützen.

Sie können Kanäle in der Kanalkonfiguration der Protokollkonfigurationsdatei definieren. Standardmäßig ist nur ein Dateikanal definiert.

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

Jeder Protokollkanal muss den Typparameter angeben. Dieser Parameter bestimmt die Schreibmethode der Protokolldatei. Wenn Sie andere Schreibmethoden angeben müssen, müssen Sie zusätzliche Erweiterungen installieren . . Sie können aber auch den gleichen Typ für verschiedene Protokollkanäle angeben, die anderen Konfigurationsparameter sind jedoch unterschiedlich, beispielsweise unterschiedliche Schreibpfade.

Unabhängig davon, welcher Protokollschreibtyp verwendet wird, sind die allgemeinen Konfigurationen, die jeder Protokollkanal unterstützen kann, wie folgt:

Protokolländerungen in der ThinkPHP6.0-Version

Die Verwendung des Level-Parameters ist Im Einklang mit der globalen Protokollkonfiguration wird das Standardprotokoll einmal nach Abschluss der Anforderung geschrieben. Wenn Sie Protokollinformationen in Echtzeit schreiben müssen, müssen Sie es einrichten.

'realtime_write'=>true,

Wenn es sich unter der Befehlszeile befindet, wird das Protokoll automatisch in Echtzeit geschrieben, unabhängig davon, ob es festgelegt ist.

Standardkanal

Definieren Sie den Standardkanal des Protokolls, indem Sie den Standardparameter festlegen, zum Beispiel:

'default'=>'file',

Level Kanal

Sie können verschiedene Protokollebenen festlegen und verschiedene Protokollkanäle verwenden.

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

Nach dem Festlegen eines Ebenenkanals werden Protokolle auf dieser Ebene nicht im Standardkanal aufgezeichnet. Bitte beachten Sie.

Der Protokollkanal erfordert die Mitarbeit des Protokolltreibers. Sie können den Protokolltreiber auch anpassen.

Kanal wechseln

Sie können den Standard-Schreibkanal des aktuellen Protokolls auch manuell wechseln, zum Beispiel:

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

Unterstützt das Umschalten zur Verwendung mehrerer Kanäle Aufzeichnung, zum Beispiel:

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

Protokollverarbeitung

Das Schreiben von Protokollen unterstützt die Ereignisüberwachung, zum Beispiel:

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

Der Parameter des Abschlusses ist ein LogWrite Ereignisklassenobjektinstanz: Sie können zwei Attribute erhalten:

Protokolländerungen in der ThinkPHP6.0-Version

Die Protokollinformationen sind ein zweidimensionales Array, das alle Ebenen von Protokollinformationen (die aufgezeichnet werden dürfen) unter dem enthält aktueller Protokollkanal.

Protokollinformationen formatieren

Das System stellt zwei Parameter zum Formatieren von Protokollinformationen bereit. Der erste ist time_format zum Anpassen des Zeitanzeigeformats Parameter des Protokollausgabeformats.

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

Das erste %s des Formatparameters ist die Protokollaufzeichnungszeit (das Format der Protokollzeit wird durch den Parameter time_format definiert). Das zweite %s ist die Protokollebene. Das dritte %s sind die Protokollinformationen , die Reihenfolge kann nicht angepasst werden .

Protokoll im JSON-Format

kann die Aufzeichnung von Dateiprotokollen im JSON-Format unterstützen, was es für einige Protokollanalysetools von Drittanbietern bequemer macht, Protokollanalysen durchzuführen.

Fügen Sie in der Protokollkonfigurationsdatei

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

hinzu, um die Protokollierung im JSON-Format über die CLI-Befehlszeile zu aktivieren.

和之前版本的区别在于,新版的每个日志信息都是一条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

Das obige ist der detaillierte Inhalt vonProtokolländerungen in der ThinkPHP6.0-Version. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:thinkphp.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen