Monolog使用

Service

<?php namespace App\Master\Services;

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Illuminate\Log\Writer;

class BLogger
{
    private static $loggers = array();

    // 获取一个实例
    public static function getLogger($type, $day = 30)
    {
        if (empty(self::$loggers[$type])) {
            self::$loggers[$type] = new Writer(new Logger($type));
            self::$loggers[$type]->useDailyFiles(storage_path().'/logs/'. $type .'.log', $day);
        }

        $log = self::$loggers[$type];
        return $log;
    }

    /**
     * 做错误纪录,可以在任何地方调用这个纪录错误信息  
     * @param  Exception $exception 异常
     * @return null
     */
    public static function logError($exception, $type = self::LOG_ERROR)
    {
        $logger = self::getLogger($type);
        $err = [
            'message' => $exception->getMessage(),
            'file' => $exception->getFile(),
            'line' => $exception->getLine(),
            'code' => $exception->getCode(),
            'url' => \Request::url(),
            'input' => \Input::all(),
        ];
        BLogger::getLogger("error")->error($err);
    }
}

Controller

 BLogger::getLogger('aaa')->error([1=> 1]);

最终生成的日志名:
-rw-rw-r-- 1 weihaoyu  weihaoyu       55 10月 17 13:32 aaa-2019-10-17.log
日志记录:
[2019-10-17 13:32:21] aaa.ERROR: array (
  1 => 1,
)  

其中核心概念和操作顺序(上面代码中省略掉了2-4步,只做了最简单的磁盘写入):

1、new Logger($channel)//一般channel用模块和控制器文件名命名

2、Hander:使用多个handler,先入后出,通过bubble参数控制是否继续冒泡,false在当前handler处理停止冒泡,true继续冒泡

3、Processor:为日志记录添加额外信息

4、Formatter:把日志记录格式化成指定格式

5、使用laravel中的 Illuminate\Log\Writer 写入磁盘,其他框架用对应的类或者自己写

参考:

https://github.com/Seldaek/monolog

https://blog.csdn.net/sanbingyutuoniao123/article/details/71079534

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AirGo.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值