小白折腾服务器(五):自己写个记录日志的小方法,解决使用 supervisor 后日志堆叠

题记:这篇主要是因为困扰了很久的一个问题,没有找到好方法,就只能用笨办法了。

laravel的日志设置的是daily模式,就是每天的日志文件分开,使用supervisor后,日志堆积在supervisor启动进程的一天里了
怎么解决呢?

在helpers函数中建一个方法

if (!function_exists('iuLog')) {
    /**
     * @param        $level
     * @param        $desc
     * @param array  $data
     * @param string $filename
     */
    function iuLog($level, $desc = '', $data = [], $filename = '')
    {
        $logPath = storage_path() . '/logs/' . date('Y/m/');

        if (!file_exists($logPath)) {
            mkdir($logPath, 0777, true);
        }
        $filename = $filename ?: date('d') . '-iu';

        $dir = $logPath . $filename . '.log';
        if ($level == PHP_EOL) {
            file_put_contents($dir, PHP_EOL, FILE_APPEND);

            return;
        }
        $prefix = '[' . now() . '] ' . env('APP_ENV') . '.' . strtoupper($level) . ': ';

        if (!$data) {
            file_put_contents($dir, $prefix . $desc . PHP_EOL, FILE_APPEND);

            return;
        }
        //            JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256)
        //            JSON_UNESCAPED_SLASHES(不转义反斜杠,对应的数字 64)
        //            JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
        file_put_contents($dir, $prefix . $desc . json_encode($data, 320) . PHP_EOL, FILE_APPEND);
    }
}

使用:

        iuLog('debug', 'Request Url: ' . $request->url());
        iuLog('debug', 'Request Method: ' . $request->method());
        iuLog('debug', 'Request Params: ', $request->all());
        iuLog(PHP_EOL);

        // 对比laravel 的 Facade 方法

        Log::debug('Request Url: '.$request->url());
        Log::debug('Request Method: '.$request->method());
        Log::debug('Request Params: '.json_encode($request->all()));

效果:

感兴趣的小伙伴可以点击查看:dev环境根目录就是当前日期的日志
file

后记:

1.新学的知识点,json_encode同时使用2个常量

php格式化json的函数json_encode($value,$options)
其中有2个比较常用到的参数
JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256)
JSON_UNESCAPED_SLASHES(不转义反斜杠,对应的数字 64)
通常json_encode只能传入一个常量,如果同时使用2个常量怎么办?
JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
使用方法:json_encode($arr,320);即可完成同时使用2个常量。

参考链接: PHP json_encode里面经常用到的 JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES

2.这肯定不是最佳解决方案,再翻底层代码吧- -如果有知道的小伙伴,求教下....
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

+ 运算并不是最标准的解决方案,严格来讲,应该是使用位或 | 运算。

5年前 评论

@Wi1dcard 嗯... 你也说了,严格来讲.... 这里实现需求就好啦

5年前 评论
wanghan

看你好久不更新了,以为把服务器整炸,跑路了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
php @ abc
文章
20
粉丝
94
喜欢
197
收藏
231
排名:107
访问:8.9 万
私信
所有博文
社区赞助商