簡單的swoole 日誌類
今天 針對公司自己框架 簡單寫個日誌類 主要使用__callStatic
靜態魔術方法 Swoole 指令碼中呼叫該日誌.
<?php use Config\Log; /** * Created by PhpStorm. * User: Len * Date: 2018/12/13 * Time: 13:05 * Desc: */ class Loger { const SPLIT_CHAR = '--'; private static $unique_log_id = '-'; /** * @return string */ public static function getUniqueLogId(): string { return self::$unique_log_id; } /** * @param string $unique_log_id */ public static function setUniqueLogId(string $unique_log_id): void { self::$unique_log_id = $unique_log_id; } /** * @desc 魔術方法靜態方法不存在下呼叫 * @param $name * @param $arguments * ------------------------------------------------------------ */ public static function __callStatic($name, $arguments) { // TODO: Implement __call() method. self::wlog($arguments, $name); } /** * @desc work程序內日誌 僅限work 程序內使用 * @author len * @param $msg * @param string $name *------------------------------------------------------ */ public static function wlog($msg, $name = Log::MATCH) { $str = ''; if (is_array($msg)) { foreach ($msg as $key => $val) { if (is_array($val)) $val = json_encode($val); $str .= " {$key} {$val}"; } } else { $str .= $msg; } $worker_id = APP::getWorkerId(); if (is_null($worker_id)) { $worker_id = 'task'; } $date = date('Y/m/d H:i:s'); $no = date('Ymd'); $file_name = LOG_PATH . DS . $name . '_' . $worker_id . '_' . $no . '.log'; $data = $date . self::SPLIT_CHAR; // 當前日誌唯一標識 $data .= APP::getUniqueLogId() . self::SPLIT_CHAR; // 當前worker 程序PID $data .= APP::getWorkerPid() . self::SPLIT_CHAR; $data .= $worker_id . self::SPLIT_CHAR . $str . " \n"; file_put_contents($file_name, $data, FILE_APPEND); } /** * @param $msg * @param string $name * ------------------------------------------------------------ */ public static function log($msg, $name = Log::DEBUG) { $str = ''; if (is_array($msg)) { foreach ($msg as $key => $val) { if (is_array($val)) $val = json_encode($val); $str .= " {$key} {$val}"; } } else { $str .= $msg; } $date = date('Y/m/d H:i:s'); $no = date('Ymd'); $file_name = LOG_PATH . DS . $name . '_' . $no . '.log'; $data = $date . self::SPLIT_CHAR; $worker_id = APP::getWorkerId(); if (is_null($worker_id)) { $worker_id = 'task'; } // 獲取唯一標識 $data .= APP::getUniqueLogId() . self::SPLIT_CHAR; // 當前worker 程序PID $data .= APP::getWorkerPid() . self::SPLIT_CHAR; $data .= $worker_id . self::SPLIT_CHAR . $str . " \n"; file_put_contents($file_name, $data, FILE_APPEND); } }
分隔符是為了logtail
檢視日誌
寫入 worker ID 及 worker PID 及 唯一標識
通過靜態方法實現動態建立日誌名稱的效果.
效能如何暫不考慮, 能輸出日誌即可, 不喜勿噴.
最後更新於2018-12-1305:22:20 並被新增「」標籤,已有 1 位童鞋閱讀過。