monolog封裝


做一下基本關於Monolog的基本介紹:

Monolog是基於PHP的日志類庫。

介紹就到這,言歸正傳

安裝

安裝最新版本:(composer 還沒安裝的~:https://www.phpcomposer.com/)

composer require monolog/monolog 

要求PHP版本為5.3以上。

以上都是百度都可以進行搜索的廢話,這里咱們只是進行復制並且再廢話一遍~

接下來的是重點:

<?php /** * Created by PhpStorm. * User: j * Date: 2019-01-09 * Time: 15:33 */ namespace common\log; use Monolog\Formatter\LineFormatter; use Monolog\Logger; use Monolog\Handler\RotatingFileHandler; class Log { private static $loggers; /** * 日志默認保存路徑 * @var string */ private static $fileName = '/data/logs/monolog/'; /** * 日志留存時間 * @var int */ private static $maxFiles = 31; /** * 日志等級 * @var int */ private static $level = Logger::DEBUG; /** * 文件讀寫權限分配 * 0666 保證log日志文件可以被其他用戶/進程讀寫 * @var int */ private static $filePermission = 0666; /** * monolog日志 * @param $name * @param $arguments * @return mixed */ public static function __callStatic($name, $arguments) { $logger = self::createLogger($name); $message = empty($arguments[0]) ? '' : $arguments[0]; $context = empty($arguments[1]) ? [] : $arguments[1]; $levelName = empty($arguments[2]) ? $name : $arguments[2]; $backtraceOffset = empty($arguments[3]) ? 0 : intval($arguments[3]); $level = Logger::toMonologLevel($levelName); if (!is_int($level)) $level = Logger::INFO; // $backtrace數組第$idx元素是當前行,第$idx+1元素表示上一層,另外function、class需再往上取一個層次 // PHP7 不會包含'call_user_func'與'call_user_func_array',需減少一層 if (version_compare(PCRE_VERSION, '7.0.0', '>=')) { $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $idx = 0 + $backtraceOffset; } else { $backtrace = debug_backtrace(); $idx = 1 + $backtraceOffset; } $trace = basename($backtrace[$idx]['file']) . ":" . $backtrace[$idx]['line']; if (!empty($backtrace[$idx + 1]['function'])) { $trace .= '##'; $trace .= $backtrace[$idx + 1]['function']; } $message = sprintf('==> LOG: %s -- %s', $message, $trace); return $logger->addRecord($level, $message, $context); } /** * 創建日志 * @param $name * @return mixed */ private static function createLogger($name) { if (empty(self::$loggers[$name])) { // 根據業務域名與方法名進行日志名稱的確定 $category = $_SERVER['SERVER_NAME']; // 日志文件目錄 $fileName = self::$fileName; // 日志保存時間 $maxFiles = self::$maxFiles; // 日志等級 $level = self::$level; // 權限 $filePermission = self::$filePermission; // 創建日志 $logger = new Logger($category); // 日志文件相關操作 $handler = new RotatingFileHandler("{$fileName}{$name}.log", $maxFiles, $level, true, $filePermission); // 日志格式 $formatter = new LineFormatter("%datetime% %channel%:%level_name% %message% %context% %extra%\n", "Y-m-d H:i:s", false, true); $handler->setFormatter($formatter); $logger->pushHandler($handler); self::$loggers[$name] = $logger; } return self::$loggers[$name]; } } 

只要把該文件放在項目的目錄下,並且保證項目的路由沒問題的時候,你就可以打印日志了。

打印有多簡單呢,一行即可,還是可以隨着你的自定義命名,進行服務器上的對應文件寫入~

    /** * 如何使用log日志 */ public function actionUseLog() { // Log是靜態方法 引入use common\log\Log;即可以調用 // info是寫入的方法名稱,這里可以自定義,可以是任何文件名稱,這里如果寫入info 服務器看到的就是帶 info-2019-01-01.log 的文件 // 就是這么簡單 // 使用的時候在服務器新建/data/logs/monolog/ 路徑的文件夾,並且給與0666以上讀寫權限即可 Log::info('第一個字段是內容',['KEY'=>'VALUE']); }



轉自 https://www.jianshu.com/p/0aeb8824fe23


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM