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

猜你喜欢

转载自www.cnblogs.com/brady-wang/p/13369497.html
今日推荐