fengxinyhyl/logger

一个通用的日志服务

v1.0.6 2023-10-17 13:25 UTC

README

安装方式

  • 方式一:composer require fengxinyhyl/logger
  • 方式二:在composer.json文件的require里添加 "fengxinyhyl/logger":"~0.1",运行composer update

项目依赖

"require": {
    "monolog/monolog": "^2.0",
    "ext-redis": "*",
    "php": ">=5.4.0",
    },

配置文件

return array(
    /**
     * 当前项目的唯一标识
     * 用来区分日志系统中不同项目的日志
     * 用来创建es索引,不能出现大写字母
     */
    'projectName' => 'user_center',

    /**
     * redis缓存配置
     * 日志传送的redis数据库
     */
    'redisConfig' => array(
        'host' => '192.168.107.107',
        'port' => 6379,
        'select' => 0,
    ),


    /**
     * 短信报警配置
     * 每小时报警次数是alertCondition的整数倍会发送报警短信
     * 每小时至多发送5条
     */
    'smsConfig' => array(
        // 报警短信接收号码必须配置
        'phones' => array(
        ),
        // 发送条件必须为正整数,默认为10,每小时发生错误的数量是报警条件的整数倍时,发送一次报警短信
        'alertCondition' => 10,
    ),

    /**
     * 日志文件目录,使用绝对路径,默认tmp目录
     */
    'logDir' => '/tmp',
);

使用方法

1.日志分类

  • common 常规日志,默认选项
  • system 系统日志
  • push 访问外部日志
  • job 定时任务日志

2.使用方法

$config = require('config.php');
Logger::getLogger()->initLogger($config); // 必须先根据配置初始化日志对象
Logger::getLogger()->info('bbbb');        // getLogger()返回日志单例对象,默认调用commen
Logger::getLogger()->system()->error('bbbb');

扩展

1.BuildParams,添加参数

// 应用开始
'app_begin'    => [
    'your_path\BuildParams',
],

class BuildParams
{
    /**
     * 将参数添加到日志中
     */
    public function run() {
        $params = Request::instance()->param();
        Logger::getLogger()->system()->getUseAge()->pushProcessor(function ($record) use ($params) {
            $record['extra']['params'] = json_encode($params, JSON_UNESCAPED_UNICODE);
            return $record;
        });
    }

}

2.buildResponse,添加返回的数据

// 应用结束(TP项目)
'app_end'      => [
    'your_path\BuildResponse',
],

/**
 * BuildResponse.php
 * 将返回数据添加到日志中
 * @param Response $response
 */
public function run(Response $response) {
    $response = $response->getData();
    // 本次访问返回的数据
    $response = is_array($response) ? json_encode($response, JSON_UNESCAPED_UNICODE) : $response;
    // 本次访问运行的时间
    $runTime = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
    if($runTime > 1){ // 时间可根据项目自行配置
        Logger::getLogger()->common()->warn('本次运行时间过长', array('runTime' => $runTime.' s'));
    }
    Logger::getLogger()->system()->getUseAge()->pushProcessor(function ($record) use ($response, $runTime) {
        $record['extra']['runTime'] = $runTime.' s';
        $record['extra']['response'] =  $response;
        return $record;
    });
    Logger::getLogger()->system()->info('success');
}

3.CacheException,捕获系统异常,报警依赖此项

ThinkPHP 异常处理

Laravel 错误处理

/**
 - 系统级别异常处理文件
 - config配置文件中 'exception_handle' => '\\app\\common\\exception\\Http',定义
 - Class Http
 - @package app\common\exception
 */
class Http extends Handle
{
    public function render(Exception $e)
    {
        //TODO::开发者对异常的操作
        //可以在此交由系统处理
        Logger::getLogger()->critical('file:'.$e->getFile().' line:'. $e->getLine().' msg:'.$e->getMessage());
        return parent::render($e);
    }
}

错误级别定义

  • 调试/DEBUG (100): 详细的调试信息。
  • 信息/INFO (200): 有意义的事件,比如用户登录、SQL日志。
  • 提示/NOTICE (250): 正常但是值得注意的事件。
  • 警告/WARNING (300): 异常事件,但是并不是错误。比如使用了废弃了的API,错误地使用了一个API,以及其他不希望发生但是并非必要的错误。
  • 错误/ERROR (400): 运行时的错误,不需要立即注意到,但是需要被专门记录并监控到。
  • 严重/CRITICAL (500): 边界条件/危笃场景。比如应用组件不可用了,未预料到的异常。
  • 警报/ALERT (550): 必须立即采取行动。比如整个网站都挂了,数据库不可用了等。这种情况应该发送短信警报,并把你叫醒。
  • 紧急/EMERGENCY (600): 紧急请求:系统不可用了。