python catch_GitHub - wucao/JCatch: Exception异常管理平台,支持Java、PHP、Python等多种语言...-程序员宅基地

技术标签: python catch  

什么是JCatch

当程序发生异常(Exception),处理方式一般是通过日志文件记录下来,这种方式很容易被忽略,而且查询起来比较麻烦。

JCatch提供了一种方案,当程序发生异常时,通过JCatch平台接口提交到JCatch平台,由JCatch平台统一管理所有异常,这样可以方便查询,并且JCatch平台提供异常监控功能,当应用程序发生异常时会以邮件方式提醒相关人员。

应用列表:

应用配置:

异常列表:

Java异常详情:

PHP异常:

邮件通知:

运行/部署JCatch

MySQL数据库

使用MySQL数据库执行doc/sql.sql中的SQL脚本创建表

修改src/main/resources/MyBatis.xml文件中的数据库连接

配置登录管理员账户

默认管理员账户: 用户名 admin 密码 xxg

管理员登录基于Spring Security实现,可以配置src/main/resources/springSecurity.xml文件

支持邮件订阅功能

邮件订阅功能会在应用发生异常时,每小时发送一封邮件给应用订阅者,邮件内容为这个小时内的异常信息,配置src/main/resources/messageService.xml支持邮件订阅

打包

mvn package命令生成war包,可部署在Tomcat、Jetty等服务器中

运行MyBatis Generator生成代码

如果二次开发需要修改表结构, 修改src/main/resources/generatorConfig.xml文件中的数据库连接, com.xxg.jcatch.mbg包下代码是通过MyBatis Generator自动生成的,可以运行mvn mybatis-generator:generate命令生成代码

API

提交一条Exception

URL: http://[your baseUrl]/api/submitExceptionJson?appId=[your appId]

请求类型: POST

请求Body:

{

"fileName": "Main.java",

"methodName": "main",

"className": "com.xxg.jcatch.Main",

"stackTrace": "java.lang.ArithmeticException: / by zero\n\tat com.xxg.jcatch.Main.main(Main.java:16)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)\n",

"message": "/ by zero",

"lineNumber": 16,

"exceptionName": "java.lang.ArithmeticException"

}

响应Body:

{

"success": true

}

客户端接入

Java

PHP

通用

function submitToJCatch($e) {

$json = json_encode($e);

$ch = curl_init('http:///api/submitExceptionJson?appId=');

curl_setopt_array($ch, array(

CURLOPT_POST => TRUE,

CURLOPT_RETURNTRANSFER => TRUE,

CURLOPT_HTTPHEADER => array(

'Content-Type: application/json'

),

CURLOPT_POSTFIELDS => $json,

CURLOPT_CONNECTTIMEOUT => 2,

CURLOPT_TIMEOUT => 4,

));

curl_exec($ch);

}

function error_handler($errno, $errstr, $errfile, $errline) {

submitToJCatch(array(

'message' => $errstr,

'fileName' => $errfile,

'lineNumber' => $errline,

));

}

function exception_handler($exception) {

submitToJCatch(array(

"fileName" => $exception->getFile(),

"lineNumber" => $exception->getLine(),

"stackTrace" => $exception->getTraceAsString(),

"message" => $exception->getMessage(),

"exceptionName" => get_class($exception)

));

}

set_error_handler("error_handler");

set_exception_handler("exception_handler");

PHP的错误和异常会通过set_error_handler、set_exception_handler指定的函数来处理,一般PHP框架都会有自己的一套错误处理机制,如果使用PHP框架建议通过框架本身的错误处理机制来提交错误到JCatch,下面有各个框架接入JCatch的方法。

Laravel

修改App/Exceptions/Handler.php文件:

public function report(Exception $exception)

{

$appId = '';

$submitUrl = 'http:///api/submitExceptionJson?appId=' . $appId;

$data = json_encode([

"fileName" => $exception->getFile(),

"lineNumber" => $exception->getLine(),

"stackTrace" => $exception->getTraceAsString(),

"message" => $exception->getMessage(),

"exceptionName" => get_class($exception)

]);

$ch = curl_init($submitUrl);

curl_setopt_array($ch, array(

CURLOPT_POST => TRUE,

CURLOPT_RETURNTRANSFER => TRUE,

CURLOPT_HTTPHEADER => array(

'Content-Type: application/json'

),

CURLOPT_POSTFIELDS => $data,

CURLOPT_CONNECTTIMEOUT => 2,

CURLOPT_TIMEOUT => 4,

));

curl_exec($ch);

return parent::report($exception);

}

CodeIgniter 3.x

在application/core目录下新建文件MY_Exceptions.php,代码如下:

class MY_Exceptions extends CI_Exceptions

{

public function log_exception($severity, $message, $filepath, $line)

{

parent::log_exception($severity, $message, $filepath, $line);

$json = json_encode(array(

"message" => $message,

"fileName" => $filepath,

"lineNumber" => $line

));

$ch = curl_init('http:///api/submitExceptionJson?appId=');

curl_setopt_array($ch, array(

CURLOPT_POST => TRUE,

CURLOPT_RETURNTRANSFER => TRUE,

CURLOPT_HTTPHEADER => array(

'Content-Type: application/json'

),

CURLOPT_POSTFIELDS => $json,

CURLOPT_CONNECTTIMEOUT => 2,

CURLOPT_TIMEOUT => 4,

));

curl_exec($ch);

}

}

当发生错误或异常时,CI框架会自动调用以上代码,将异常信息提交到JCatch API。

Yii 1.1

在protected/components目录下新建文件ErrorHandler.php,代码如下:

class ErrorHandler extends CErrorHandler

{

public $jcatchBaseUrl;

public $jcatchAppId;

public $jcatchSecretKey;

protected function handleException($exception)

{

parent::handleException($exception);

$this->submitToJCatch(array(

"fileName" => $exception->getFile(),

"lineNumber" => $exception->getLine(),

"stackTrace" => $exception->getTraceAsString(),

"message" => $exception->getMessage(),

"exceptionName" => get_class($exception)

));

}

protected function handleError($event)

{

parent::handleError($event);

$this->submitToJCatch(array(

'message' => $event->message,

'fileName' => $event->file,

'lineNumber' => $event->line,

));

}

private function submitToJCatch($e) {

$json = json_encode($e);

$ch = curl_init($this->jcatchBaseUrl.'/api/submitExceptionJson?appId='.$this->jcatchAppId);

curl_setopt_array($ch, array(

CURLOPT_POST => TRUE,

CURLOPT_RETURNTRANSFER => TRUE,

CURLOPT_HTTPHEADER => array(

'Content-Type: application/json'

),

CURLOPT_POSTFIELDS => $json,

CURLOPT_CONNECTTIMEOUT => 2,

CURLOPT_TIMEOUT => 4,

));

curl_exec($ch);

}

}

修改所使用的配置文件,例如protected/config/main.php:

'errorHandler'=>array(

'errorAction'=>'site/error',

'class'=>'ErrorHandler',

'jcatchBaseUrl'=>'',

'jcatchAppId'=>'',

'jcatchSecretKey'=>'',

),

当发生错误或异常时,Yii框架会自动调用ErrorHandler来处理异常,将异常信息提交到JCatch API。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39836943/article/details/111958937

智能推荐

Stm8 串口重定向及问题解决_error[li009]: runtime model conflict: module xxexi-程序员宅基地

文章浏览阅读1.4k次。一,代码及其设置#include <stdio.h>int fputc(int ch, FILE *f)//Stm8005 重定向{ while (!(UART2->SR&0x80)); UART2->DR=ch; return ch;}同时需要修改IAR的Projec t- >Options -> General..._error[li009]: runtime model conflict: module xxexit.o(dbgstm8smn.a) specifie

Java Utils工具类大全_utils.getapp() java-程序员宅基地

文章浏览阅读1.8w次,点赞4次,收藏69次。源码和jar见:https://github.com/evil0ps/utils#Java Utils封装了一些常用Java操作方法,便于重复开发利用.另外希望身为Java牛牛的你们一起测试和完善,欢迎入群263641914 一起封装和完成常用的Java代码。节约撸码时间以方便有更多的时间去把妹子~#开发环境Win7x64JDK1.7IDEA14#项目结构│ README.m..._utils.getapp() java

linux离线断网环境 ,安装virtualenv和django,创建项目虚拟环境和安装依赖包,_linux离线安装django-程序员宅基地

文章浏览阅读3.2k次。离线安装virtualenv和django工作中需要离线安装django,记录下: 环境: 离线机器系统:centos 6.5 python 版本: python 2.6.6 virtualenv 版本: 1.9 django 版本: 1.6.11 离线安装virtualenv 下载安装包 $ curl -O https://pypi.python.o..._linux离线安装django

Debian10 安装桌面 亲测有效-程序员宅基地

文章浏览阅读1.3w次,点赞5次,收藏23次。在Debian 10上安装桌面环境如果在安装过程中没有选择桌面,只是安装了标准系统Debian提供了一个命令行工具(tasksel)来简化桌面环境的安装,只需运行如下命令即可:$ sudo tasksel然后,你可以从列表中选择所需的桌面环境,如下图所选的是Cinnamon:从要安装的软件列表中选择Cinnamon,然后使用选择“ok”:稍等片刻,注销或者重启即可..._debian10 安装桌面

Safari浏览器下使用H5视频播放问题的解决_safari用get方法请求视频资源-程序员宅基地

文章浏览阅读8.8k次。我们的项目,由于先做的安卓APP的开发,在安卓上测试视频播放通过以后。同样的接口放到IOS上是不能播放的。后来查了相关资料了解到其中的差别,总的来说,安卓上是请求一个视频链接,返回一整个视频文件。但是在IOS上,不是一次性请求全部文件的,一般首先会请求0-1字节,然后多次分段请求视频数据。 所以首先要解析Request Headers里面的Range字段,获取本..._safari用get方法请求视频资源

管理开发系统八:winform导出excel_winfromexcel导出保存文件-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏23次。我这里说3种方法 一种数据流 有点速度比较快,缺点列表宽度不适配 日期长的直接显示##### 拉宽了才会显示正常。//1导出 excel 数据流方式 public static void ExcelBtnLiu(DataGridView dgvUseName, string name) { if (dgvUseName.Rows.Co..._winfromexcel导出保存文件

随便推点

idea如何创建XML文件_idea创建xml配置文件-程序员宅基地

文章浏览阅读3.5w次,点赞78次,收藏181次。1.找到File目录下的Settings打开2.找到Editor并打开3.找到Editor下的File and Code Templates并打开4.先选中Files再点击+号​5.Name的值改为XML File ,Extension(文件后缀)里面填xml ,内容中间的内容为选中下方的Enable Live Templates后点击Apply,最后点击OK6.右键项目new --> XML File ​_idea创建xml配置文件

vue v-charts面积图实现_v-charts-v2-程序员宅基地

文章浏览阅读504次。vue v-charts面积图实现_v-charts-v2

Android官方提供的支持不同屏幕大小的全部方法-程序员宅基地

文章浏览阅读62次。转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8830286原文地址为:http://developer.android.com/training/multiscreen/screensizes.html本文将告诉你如何让你的应用程序支持各种不同屏幕大小,主要通过以下几种办法:让你的布局能充分的自适应屏幕根据屏..._

大数据Linux命令之如何判断Linux服务是否存活_根据进程号和端口号判断服务是否存活-程序员宅基地

文章浏览阅读1.3k次。一、查看进程是否运行: ps -ef | grep httpd二、查看端口号: netstat -nlp|grep xxx (xxx是pid)第一步:ping xxx服务所在的机器的ip: 网络环境能够ping通的,服务正常,不能ping通,需要排查。Windows:Linux:第二步:查看xxx服务的端口号和服务地址(监听地址)第三步 telnet xxxxxx yy (x..._根据进程号和端口号判断服务是否存活

matlab实现人群计数密度图标签文件生成_get_density_map_gaussian matlab-程序员宅基地

文章浏览阅读4.1k次,点赞7次,收藏49次。问题近期在研究C^3 Framework系列之一:一个基于PyTorch的开源人群计数框架为了实现自行标注数据集,也就是针对诸如MCNN等工程制作自己的mat文件,或者csv文件。最终结果大概是这样数据标定针对上述三张照片,通过matlab代码进行数据标定,标定过程类似于这样对应代码%对图片上某个点进行标注clear allclose allclcset(gcf,'co..._get_density_map_gaussian matlab

C++实现双人对决的围棋程序,这是上面神仙围法?_胜负对决c++-程序员宅基地

文章浏览阅读1.1k次。围棋使用格状棋盘及黑白二色棋子进行对弈,双方在网格交叉点上交替放置黑白两色棋子,落子后不能移动,围地吃子,以所围“地”的大小决定胜负。这是一款小编用C++编写的可以双人对决的围棋程序,程序不很复杂,通过编写这个小程序,让我对VC++有了更深层的了解。项目结构展示:源码展示:声明:本文内容来源于网络,如有侵权请联系删除..._胜负对决c++