小白折腾服务器(五):自己写个记录日志的小方法,解决使用 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环境根目录就是当前日期的日志
后记:
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 协议》,转载必须注明作者和本文链接
+
运算并不是最标准的解决方案,严格来讲,应该是使用位或|
运算。@Wi1dcard 嗯... 你也说了,严格来讲.... 这里实现需求就好啦
看你好久不更新了,以为把服务器整炸,跑路了