亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

日志

日志可以快速幫助開發者快速定位問題的根源、追蹤程序執行的過程、追蹤數據變化、數據統計和性能分析等。

配置說明

EasySwoole3.4.4 版本中優化了框架默認的日志處理機制,允許用戶更加方便地去自定義配置日志處理,可以直接在配置文件 (dev.php/produce.php) 中進行配置。(以后版本也將兼容以下配置特性)

配置包括以下幾方面:

  • 設置記錄日志文件時日志文件存放目錄 (dir),用戶可以自己設置日志存放目錄(但是一定要保證日志有寫入權限),配置值為 路徑,默認為 框架根目錄的 Log 目錄
  • 設置記錄日志時的日志最低等級 (level),等級配置值默認為 \EasySwoole\Log\LoggerInterface::LOG_LEVEL_DEBUG,等級值支持 \EasySwoole\Log\LoggerInterface::LOG_LEVEL_DEBUG (0級)\EasySwoole\Log\LoggerInterface::LOG_LEVEL_INFO (1級)\EasySwoole\Log\LoggerInterface::LOG_LEVEL_NOTICE (2級)\EasySwoole\Log\LoggerInterface::LOG_LEVEL_WARNING (3級)\EasySwoole\Log\LoggerInterface::LOG_LEVEL_ERROR (4級)。例如當我們在配置文件中把日志等級設置為 \EasySwoole\Log\LoggerInterface::LOG_LEVEL_INFO (1級) 時,就不會把我們在框架中調用打印小于這個等級的日志記錄記錄到日志文件中 (比如 LOG_LEVEL_DEBUG (0級) 就不會被記錄到日志當中了,也不會顯示在控制臺了)。
  • 設置日志處理器 handler (handler),默認使用框架內置 handler,用戶可以自定義日志類實現 \EasySwoole\Log\LoggerInterface 接口,來處理記錄日志。配置值為 自定義處理類名,默認為 \EasySwoole\Log\Logger。具體自定義實現日志處理器可看下文。
  • 設置記錄日志到日志文件時是否在控制臺打印日志 (logConsole)。配置值為 boolean 值,默認為 true,即開啟。
  • 設置是否開啟在控制臺打印日志 (displayConsole)。配置值為 boolean 值,默認為 true,即開啟。
  • 設置打印日志時忽略哪些分類的日志不進行記錄 (ignoreCategory) 。配置值為 array 類型值,默認為 null (即不忽略任何分類的日志,任何分類的日志都進行在控制臺顯示打印并記錄到文件),配置忽略分類值支持 debuginfonoticewarningerror 作為配置值 array 中的可選值。例如:設置為 ['debug', 'notice'] 時,即當我們在框架中使用下面列舉的使用日志的方法時,調用 debugnotice 方法記錄日志時,不會把 debugnotice 分類的日志在控制臺顯示,也不會記錄到日志文件中。

下面為配置文件中配置示例:

<?php

use EasySwoole\Log\LoggerInterface;

return [
    // ... 這里省略
    'MAIN_SERVER' => [
        // ... 這里省略
    ],
    "LOG" => [
        // 設置記錄日志文件時日志文件存放目錄
        'dir' => null,
        // 設置記錄日志時的日志最低等級,低于此等級的日志不進行記錄和顯示
        'level' => LoggerInterface::LOG_LEVEL_DEBUG,
        // 設置日志處理器 `handler` (handler)
        'handler' => null,
        // 設置開啟在記錄日志到日志文件時在控制臺打印日志
        'logConsole' => true,
        // 設置開啟在控制臺顯示日志
        'displayConsole'=>true,
        // 設置打印日志時忽略哪些分類的日志不進行記錄
        'ignoreCategory' => []
    ],
    // ... 這里省略
];

以上 levelignoreCategory 的設置,更加方便用戶在正式上線項目時,屏蔽那些在開發階段的調試日志不進行記錄和顯示。當然對于 PHP 異常錯誤等級 的等級設置(即 error_reporting()),用戶也可以設置,詳細請查看 iniialize 事件中設置ERROR_LEVEL

注意:在 EasySwoole 3.4.3 版本中,僅支持對上述 dirlevelhandler 的配置。而在 3.4.2 之前版本中,僅支持對上述 dir 的配置。

日志使用

以下方法可以在框架的 boostrap 事件之后的任意位置進行調用。調用之前請先看下文注意事項。

在非框架中使用,例如是單元測試腳本,請執行 \EasySwoole\EasySwoole\Core::getInstance()->initialize(); 用于初始化日志。 在 EasySwoole 3.3.7 之前版本中,initialize 事件調用為:EasySwoole\EasySwoole\Core::getInstance()->initialize()->globalInitialize();

log 記錄顯示日志

// 打印和記錄 `DEBUG` 等級、`debug` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->log('record level:DEBUG-category:debug log info',\EasySwoole\Log\LoggerInterface::LOG_LEVEL_DEBUG,'debug');
### [舊版本說明] 注意:當找不到 `\EasySwoole\Log\LoggerInterface::LOG_LEVEL_DEBUG` 常量,請查看是否為 `\EasySwoole\EasySwoole\Logger::LOG_LEVEL_INFO` 

// 打印和記錄 `INFO` 等級、`info` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->log('record level:INFO-category:info log info',\EasySwoole\Log\LoggerInterface::LOG_LEVEL_INFO,'info');

// 打印和記錄 `NOTICE` 等級、`notice` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->log('record level:NOTICE-category:notice log info',\EasySwoole\Log\LoggerInterface::LOG_LEVEL_NOTICE,'notice');

// 打印和記錄 `WARNING` 等級、`warning` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->log('record level:WARNING-category:warning log info',\EasySwoole\Log\LoggerInterface::LOG_LEVEL_WARNING,'warning');

// 打印和記錄 `ERROR` 等級、`error` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->log('record level:ERROR-category:error log info',\EasySwoole\Log\LoggerInterface::LOG_LEVEL_ERROR,'error');

運行結果:在控制臺和日志文件 Log\log_XxxxXx.log 中均可看到如下結果:

// 格式說明: [記錄日志時間][分類][等級]:[日志內容]
[2021-03-18 22:52:09][debug][debug]:[record level:DEBUG-category:debug log info]
[2021-03-18 22:52:09][info][info]:[record level:INFO-category:info log info]
[2021-03-18 22:52:09][notice][notice]:[record level:NOTICE-category:notice log info]
[2021-03-18 22:52:09][warning][warning]:[record level:WARNING-category:warning log info]
[2021-03-18 22:52:09][error][error]:[record level:ERROR-category:error log info]

info 日志

// 打印和記錄 `INFO` 等級、`info` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->info('record level:INFO-category:info log info');

waring 日志

// 打印和記錄 `WANING` 等級、`waring` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->waring('record level:WANING-category:waring log info');

console 日志

// 只在控制臺打印 `INFO` 等級、`debug` 分類的日志 (不記錄日志文件)
\EasySwoole\EasySwoole\Logger::getInstance()->console('console', \EasySwoole\Log\LoggerInterface::LOG_LEVEL_INFO, 'debug');

notice 日志

// 打印和記錄 `NOTICE` 等級、`notice` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->notice('record level:NOTICE-category:notice log info');

error 日志

// 打印和記錄 `ERROR` 等級、`error` 分類的日志
\EasySwoole\EasySwoole\Logger::getInstance()->error('record level:ERROR-category:error log info');

event 日志寫入后執行回調

使用 event 時,請先注冊 Event

// 日志寫入之后執行
\EasySwoole\EasySwoole\Logger::getInstance()->onLog()->set('myHook', function ($msg, $logLevel, $category) {
    // 增加日志寫入之后的回調函數
});

自定義日志處理器

需要實現 EasySwoole\Log\LoggerInterface 即可:

自定義示例如下,新建 App\Log\LogHandler.php 文件,編輯內容如下:

<?php

namespace App\Log;

use EasySwoole\Log\LoggerInterface;

class LogHandler implements LoggerInterface
{

    private $logDir;

    function __construct(string $logDir = null)
    {
        if (empty($logDir)) {
            $logDir = getcwd();
        }
        $this->logDir = $logDir;
    }

    function log(?string $msg, int $logLevel = self::LOG_LEVEL_INFO, string $category = 'debug'): string
    {
        $date = date('Y-m-d H:i:s');
        $levelStr = $this->levelMap($logLevel);
        $filePath = $this->logDir . "/log_{$category}.log";
        $str = "自定義日志:[{$date}][{$category}][{$levelStr}] : [{$msg}]\n";
        file_put_contents($filePath, "{$str}", FILE_APPEND | LOCK_EX);
        return $str;
    }

    function console(?string $msg, int $logLevel = self::LOG_LEVEL_INFO, string $category = 'console')
    {
        $date = date('Y-m-d H:i:s');
        $levelStr = $this->levelMap($logLevel);
        $temp = "自定義日志:[{$date}][{$category}][{$levelStr}]:[{$msg}]\n";
        fwrite(STDOUT, $temp);
    }

    private function levelMap(int $level)
    {
        switch ($level) {
            case self::LOG_LEVEL_INFO:
                return 'info';
            case self::LOG_LEVEL_NOTICE:
                return 'notice';
            case self::LOG_LEVEL_WARNING:
                return 'warning';
            case self::LOG_LEVEL_ERROR:
                return 'error';
            default:
                return 'unknown';
        }
    }
}

注冊自定義日志處理器

(EasySwoole 3.4.4 及以上版本可使用) 方法1. 在配置文件 (dev.php / produce.php)中注冊自定義日志處理器

<?php

use EasySwoole\Log\LoggerInterface;

return [
    // ... 這里省略
    'MAIN_SERVER' => [
        // ... 這里省略
    ],
    "LOG" => [
        'dir' => null,
        'level' => LoggerInterface::LOG_LEVEL_DEBUG,
        // 注冊日志處理器 `handler` (handler)
        'handler' =>  new \App\Log\LogHandler(),
        'logConsole' => true,
        'displayConsole'=>true,
        'ignoreCategory' => []
    ],
    // ... 這里省略
];

(EasySwoole 3.4.x+ 版本可使用) 方法2. 在 initialize 事件 中注冊自定義 logger 處理器

注冊示例代碼如下:

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');

        // 注冊自定義 `logger` 處理器
        \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::LOGGER_HANDLER, new \App\Log\LogHandler());

        // 或使用如下方式進行注冊自定義 `logger` 處理器
        // \EasySwoole\EasySwoole\Logger::getInstance(new \App\Log\LogHandler());
    }

    public static function mainServerCreate(EventRegister $register)
    {

    }
}

注意:針對 EasySwoole 3.4.x 之前版本,請在 bootstrap 事件(即項目根目錄的 bootstrap.php 文件)中,使用 \EasySwoole\EasySwoole\Logger::getInstance(new \App\Log\LogHandler()); 方式注冊自定義日志處理器。

日志中心

通常在一些情況下,會把數據往日志中心推送進行數據分析,在 onLog 回調,把日志信息,推送到日志中心即可。

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    好吊色欧美一区二区三区视频 | 夜久久久久久| 狠狠色综合网| 午夜视频久久久| 好吊日精品视频| 亚洲日本视频| 久久精品一区二区国产| 玖玖在线精品| 久久超碰亚洲| 国产精品日本一区二区| 久久超碰亚洲| 综合一区中文字幕| 亚洲精品乱码久久久久久蜜桃麻豆 | 麻豆传媒一区二区| 秋霞在线观看一区二区三区| 四虎永久在线精品免费一区二区| 91丝袜脚交足在线播放| 国产日韩精品推荐| 茄子视频成人在线观看| 中文一区一区三区免费| 一区二区三区欧美在线| 国产精品果冻传媒潘| 日本视频一区二区不卡| 狠狠久久婷婷| 444亚洲人体| 视频一区二区综合| 亚洲精品国产精品国自产观看| 久久不射2019中文字幕| 久久久久久九九九九| 亚洲啪啪av| 亚洲精品色图| 久久国产精品高清| 欧美日韩在线高清| 久久精品国语| 亚洲精品无人区| 亚洲韩日在线| 欧美精品18| 欧美一区二区三区电影在线观看| 亚洲黄色av| 福利精品视频| 日韩欧美一区二区在线观看| 欧美日韩mv| 99re在线观看| 91精品黄色| 三区精品视频观看| 国产日韩一区二区三区在线播放| 99蜜桃在线观看免费视频网站| 日本一区视频在线观看| 亚洲国产导航| 欧美日韩国产一二| 亚洲综合欧美日韩| 亚洲三级一区| 粉嫩精品一区二区三区在线观看| 亚洲一区二区三区欧美| 久久久久一区二区三区| 欧美1区3d| 在线视频欧美一区| 亚洲精品久久久久久一区二区| 国产精品一区二区三区四区五区| 精品久久久久久亚洲| 激情综合亚洲| 日韩亚洲视频在线| 亚洲人成网站在线播放2019| 久久婷婷开心| 欧美高清性xxxxhdvideosex| 精品国产免费一区二区三区| 成人情视频高清免费观看电影| 久久天堂成人| 久久亚洲影院| 91九色蝌蚪成人| 91网免费观看| a级国产乱理论片在线观看99| 久久成人一区| 成人三级视频在线观看一区二区| 久久综合一区| 国产日韩欧美综合精品| 99国精产品一二二线| 成人18视频| 国产激情一区二区三区在线观看 | 欧美日韩国产高清视频| 亚洲图片欧洲图片日韩av| 天天久久人人| 午夜日韩福利| 在线视频亚洲| 国产精品推荐精品| 久久精品日韩精品| 日韩国产一区久久| 一本一生久久a久久精品综合蜜| 亚洲精品在线视频观看| 国产精品vip| 亚洲一区二区三区精品动漫| 久久综合影视| 日韩欧美视频一区二区三区四区 | 久中文字幕一区| 日本欧美精品久久久| 亚洲国产精品一区二区第四页av | 无码免费一区二区三区免费播放| 亚洲欧洲精品一区二区三区波多野1战4 | 国产农村妇女毛片精品久久莱园子 | 国一区二区在线观看| 西西人体一区二区| 国产综合 伊人色| 亚洲欧洲精品一区| 国产精品免费一区二区三区在线观看 | 日韩电影天堂视频一区二区| 在线天堂一区av电影| 日韩午夜高潮| 欧美日韩电影一区二区| 在线 亚洲欧美在线综合一区| 久久亚洲国产精品日日av夜夜| 欧美午夜精品久久久久久蜜| 精品1区2区3区4区| 久久精品日产第一区二区三区乱码| 欧美日韩在线精品一区二区三区| 91视频免费在线观看| 在线免费观看成人网| 久久久一二三| 好吊日精品视频| 久草精品电影| 国产精品老牛| 中文字幕日韩精品一区二区| 99re在线观看| 最新成人av网站| 偷拍视频一区二区| 91pron在线| 在线观看一区| 日日夜夜精品网站| 成人xxxxx色| 亚洲精品一区二区三| 日韩中文字幕一区二区| 97视频资源在线观看| 欧美日韩一区二区三区四区在线观看| 高清视频一区| 国产一区二区高清不卡| 中文字幕一区二区三区5566| 韩国成人动漫在线观看| 亚洲欧美电影在线观看| 欧美日韩在线精品| 午夜精品区一区二区三| 精品乱码一区二区三区| 欧美亚洲专区| 国产视频在线观看一区 | 污视频在线免费观看一区二区三区| 亚洲男人影院| 99伊人成综合| 欧美女激情福利| 日韩欧美亚洲在线| 国产亚洲精品久久飘花| 久久综合福利| 久久久久se| 国产三级精品在线不卡| 亚洲午夜一级| 欧美日韩喷水| 欧美日本精品| 精品999网站| 樱桃成人精品视频在线播放| 欧美日本一区| 国产精品二区在线| 欧美日韩在线精品一区二区三区| 在线一区日本视频| 欧美高清一区| 亚洲视频高清| 在线看片一区| 国产亚洲综合精品| 男人的天堂亚洲在线| 另类图片国产| av成人观看| 国产高清精品一区二区三区| 成人午夜影院在线观看| 国产精品国产亚洲精品看不卡15| 麻豆久久精品| 147欧美人体大胆444| 成人情视频高清免费观看电影| 999国产在线| 114国产精品久久免费观看| 99在线影院| 精品国产免费一区二区三区 | 欧美日韩精品久久| 日韩在线观看电影完整版高清免费| 国产丝袜不卡| 日产精品高清视频免费| 色视频一区二区三区| 欧美成人综合| 国产精品免费在线| 国产富婆一区二区三区| 久久久久免费网| 亚洲第一综合| 欧美日韩日本国产亚洲在线| 亚洲欧洲日本一区二区三区| 国产精品夜夜夜| 九色视频成人porny| 亚洲资源在线网| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美日本精品| 免费在线亚洲| 欧美日韩国产综合在线| 欧美人与禽猛交乱配视频| 亚洲欧美日韩专区| 欧美一区二区三区四区五区六区| 欧美精品七区|