php require_once 一个基于责任链模式的 PHP 错误日志处理组件

php require_once 一个基于责任链模式的 PHP 错误日志处理组件

安装方式

使用 安装:

composer require hejunjie/error-log

使用方式



useHejunjieErrorLogLogger;
useHejunjieErrorLogHandlers;

$log = new Logger([
new HandlersConsoleHandler(), // 打印到控制台
new HandlersFileHandler('日志存储文件夹路径'), // 存储到文件
new HandlersRemoteApiHandler('请求url') // 发送到某个地址
]);

$log->info('标题','内容',['上下文']); // INFO 级
$log->warning('标题','内容',['上下文']); // WARNING 级
$log->error('标题','内容',['上下文']); // ERROR 级

$log->log('自定义级别','标题','内容',['上下文']);

用途 & 初衷

这个组件的起因其实很简单: 代码跑在不同的服务器上,有的安静得像退休老头,有的动不动炸成烟花——但它们都在跑“同一份代码”,每次炸了还都来找我。

最离谱的是php require_once 一个基于责任链模式的 PHP 错误日志处理组件,每个人都说是“最新版”,但到底是代码问题、环境问题、部署问题php require_once,谁知道? 于是我写了这个小东西:让日志可以灵活地 输出到文件、控制台、远程服务器,最好还能自定义格式php require_once,让我在被质问之前php require_once 一个基于责任链模式的 PHP 错误日志处理组件,先找到锅。

后来还写了个日志接收小脚本,配合这个组件可以把远程日志直接展示出来php require_once,用来接收、展示、筛选、管理日志错误信息:

oh-shit-

对应完整的自定义错误处理(来自)



namespaceappexception;

useCarbonCarbon;
useThrowable;
useWebmanExceptionExceptionHandler;
useWebmanHttpRequest;
useWebmanHttpResponse;
usesupportexceptionBusinessException;
useHejunjieErrorLogLogger;
useHejunjieErrorLogHandlers;

/**
* Class Handler
* @package supportexception
*/
classHandlerextendsExceptionHandler
{
public $dontReport = [
BusinessException::class,
];

publicfunctionreport(Throwable $exception)
{
parent::report($exception);
if ($this->shouldntReport($exception)) {
return;
}
$request = request;
$date = Carbon::now->timezone(config('app')['default_timezone'])->format('Y-m-d');
(new Logger([
new HandlersFileHandler(runtime_path("logs/{$date}/critical")),
new HandlersRemoteApiHandler(config('app')['log_report_url'])
]))->error(get_class($exception), $exception->getMessage, [
'project' => config('app')['app_name'],
'ip' => $request->getRealIp,
'method' => $request->method,
'full_url' => $request->fullUrl,
'trace' => $this->getDebugData($exception)
]);
}

publicfunctionrender(Request $request, Throwable $exception): Response
{
$isDebug = config('app')['debug'] == 1;
$statusCode = $this->getHttpStatusCode($exception);
$response = [
'code' => $this->getErrorCode($exception),
'message' => $isDebug ? $exception->getMessage() : 'Server Error',
'data' => $isDebug ? $this->getDebugData($exception) : new stdClass()
];
if ($requestId = $request->header('X-Request-ID')) {
$response['request_id'] = $requestId;
}
returnnew Response(
$statusCode,
['Content-Type' => 'application/json'],
json_encode($response, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)
);
}

protectedfunctiongetHttpStatusCode(Throwable $exception): int
{
$code = $exception->getCode;
return ($code >= 100 && $code < 600) ? $code : 500;
}

protectedfunctiongetErrorCode(Throwable $exception): int
{
return $exception->getCode ?: 500;
}

protectedfunctiongetDebugData(Throwable $exception): array
{
$trace = $exception->getTrace;
$simplifiedTrace = array_map(function($frame){
return [
'file' => $frame['file'] ?? '[internal function]',
'line' => $frame['line'] ?? 0,
'function' => $frame['function'] ?? ,
'class' => $frame['class'] ?? ,
'type' => $frame['type'] ??
];
}, $trace);
return [
'class' => get_class($exception),
'message' => $exception->getMessage(),
'code' => $exception->getCode(),
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'trace' => config('app')['debug'] == 1 ? $simplifiedTrace : array_slice($simplifiedTrace, 0, 5),
'previous' => $exception->getPrevious ? [
'class' => get_class($exception->getPrevious()),
'message' => $exception->getPrevious()->getMessage()
] :
];
}
}

感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » php require_once 一个基于责任链模式的 PHP 错误日志处理组件

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们