java 异常管理员_GitHub - kangZan/JCatch: Exception异常管理平台,支持Java、PHP、Python等多种语言...

什么是JCatch

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

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

应用列表:

687474703a2f2f3778693377692e636f6d312e7a302e676c622e636c6f7564646e2e636f6d2f696d6167652f6a70672f576563686174494d4731343836312e6a706567

应用配置:

687474703a2f2f3778693377692e636f6d312e7a302e676c622e636c6f7564646e2e636f6d2f696d6167652f6a70672f576563686174494d4731343836392e6a706567

异常列表:

687474703a2f2f3778693377692e636f6d312e7a302e676c622e636c6f7564646e2e636f6d2f696d6167652f6a70672f576563686174494d4731343836332e6a706567

Java异常详情:

687474703a2f2f3778693377692e636f6d312e7a302e676c622e636c6f7564646e2e636f6d2f696d6167652f6a70672f576563686174494d473136342e6a706567

PHP异常:

687474703a2f2f3778693377692e636f6d312e7a302e676c622e636c6f7564646e2e636f6d2f696d6167652f6a70672f576563686174494d4731343837302e6a706567

邮件通知:

687474703a2f2f3778693377692e636f6d312e7a302e676c622e636c6f7564646e2e636f6d2f576563686174494d473136332e6a7067

运行/部署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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oled

gnd、vcc、clk、miso、rst、mosi、cs 转载于:https://www.cnblogs.com/scrazy/p/7892733.html

使用html css js实现计算器

使用html css js实现计算器&#xff0c;开启你的计算之旅吧 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html><html lang"en"> <head> <meta charset"utf-8"> <style> /* 主体 */ .co…

面向对象的三个基本特征

面向对象的三个基本特征是&#xff1a;封装、继承、多态。封装 封装最好理解了。封装是面向对象的特征之一&#xff0c;是对象和类概念的主要特性。封装&#xff0c;也就是把客观事物封装成抽象的类&#xff0c;并且类可以把自己的数据和方法只让可信的类或者对象操作&#xff…

java学习文档_资深程序员带你深入了解JAVA知识点,实战篇,PDF文档

JAVA 集合JAVA 集合面对浩瀚的网络学习资源&#xff0c;您是否为很难找到适合自己的学习资源而感到苦恼过&#xff1f;那么&#xff0c;您来对地方了。在这里我们帮助大家整理了一份适于轻松学习 Java 文章的清单。JVM文字太多&#xff0c;不便之处敬请谅解JAVA 集合文字太多&a…

java程序员电影_Java程序员必看电影:Java 4-ever

(Scene: A father and his son playing "throw-and-catch")(场景: 一位父亲和儿子玩丢接球游戏)Narrator: They appear to be a perfect family旁白: 他们看起来像是一个完美的家庭(Scene: bedtime story)(场景: 床边故事)Father: Export all OLE objects with the c…

深入理解softmax函数

Softmax回归模型&#xff0c;该模型是logistic回归模型在多分类问题上的推广&#xff0c;在多分类问题中&#xff0c;类标签 可以取两个以上的值。Softmax模型可以用来给不同的对象分配概率。即使在之后&#xff0c;我们训练更加精细的模型时&#xff0c;最后一步也需要用soft…

strcpy函数_错误更正(拷贝赋值函数的正确使用姿势)

这是一篇对什么是C的The Rule of Three的错误更正和详细说明。阅读时间7分钟。难度⭐⭐⭐虽然上一篇文章的阅读量只有凄惨的两位数&#xff0c;但是怀着对小伙伴负责的目的&#xff0c;必须保证代码的正确性。这是大厨做技术自媒体的态度。前文最后一段代码是这样的&#xff1a…

Spring Batch中面向TaskletStep的处理

许多企业应用程序需要批处理才能每天处理数十亿笔交易。 必须处理这些大事务集&#xff0c;而不会出现性能问题。 Spring Batch是一个轻量级且强大的批处理框架&#xff0c;用于处理这些大数据集。 Spring Batch提供了“面向TaskletStep”和“面向块”的处理风格。 在本文中&a…

布局中常见的居中问题

说到布局除了浮动以及定位外还有一个不得不提的点&#xff0c;那就是居中&#xff0c;居中问题我们在网页布局当中经常遇到&#xff0c;那么以下就是分为两部分来讲&#xff0c;一部分是传统的居中&#xff0c;另一种则是flex居中&#xff0c;每个部分又通过分为水平垂直居中来…

排序算法——桶排序

把数据放进若干个桶&#xff0c;然后在桶里用其他排序&#xff0c;近乎分治思想。从数值的低位到高位依次排序&#xff0c;有几位就排序几次。例如二位数就排两次&#xff0c;三位数就排三次&#xff0c;依次按照个十百...的顺序来排序。 第一次排序&#xff1a;50 12 …

原型设计模式:创建另一个小车

创建对象确实是一个耗时的过程&#xff0c;也是一件昂贵的事情。 因此&#xff0c;我们现在正努力节省时间和金钱。 我们该怎么做&#xff1f; 克隆奇迹多莉 有人记得多莉吗&#xff1f; 是的&#xff0c;是绵羊&#xff0c;是第一个被克隆的哺乳动物。 好吧&#xff0c;我不想…

java实现周期任务_java定时任务的实现方式

本文列举常见的java定时任务实现方式&#xff0c;并做一定比较。1. 循环内部sleep实现周期执行创建一个thread&#xff0c;run() while循环里sleep()来实现周期性执行; 简单粗暴&#xff0c;作为一个初学者很容易想到。public class Task1 {public static void main(String[] a…

HTTPS协议在Tomcat中启用的配置

本文将讲解HTTPS协议在Tomcat中启用是如何配置的。 概念简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试 JSP 程序的首选。 HTTP 超文本…

CSS3实现烟花特效 --web前端

烟花特效&#xff0c;比较简单&#xff0c;直接贴代码了……<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>css3实现烟花特效</title> <style> * { margin: 0; padding: 0; } html{ widt…

java.lang.ClassNotFoundException:如何解决

本文适用于当前面临java.lang.ClassNotFoundException挑战的Java初学者。 它将为您提供此常见Java异常的概述&#xff0c;这是一个示例Java程序&#xff0c;可支持您的学习过程和解决策略。 如果您对与更高级的类加载器相关的问题感兴趣&#xff0c;我建议您复习有关java.lang…

小程序实践(三):九宫格实现及item跳转

效果图&#xff1a; 实现效果图红色线包含部分的九宫格效果&#xff0c;并附带item点击时间。 ------------------------------------------------------------------------------------------------------ 具体实现&#xff1a; 1、首先添加图片资源文件 在项目根目录新建一个…

用JavaFX编写图块引擎

随着JavaFX嵌入式版本的问世&#xff0c;我们的框架对于游戏开发变得越来越有趣&#xff0c;因为我们现在可以瞄准平板电脑和智能手机等小型消费类设备。 因此&#xff0c;我决定对JavaFX进行更多的游戏编写实验。 这次&#xff0c;我想使用Canvas对渲染进行更多控制&#xff0…

HTML5--应用网页模板

因为刚开始写博客,只想着把知识点记录在这,也想给你们一些参考,在布局上有些没有思考太多;回过头来看,实在是不忍直视,对不住之前阅读的100 ,既然昨天的事无法挽回,那就从现在开始从新整改吧!也希望大家看了,能对你们有所帮助 1.先给大家看看效果图,好让大家有点兴趣 2.大家再来…

企业集成模式简介

在此博客文章中&#xff0c;我们将介绍一些企业集成模式。 这些是旨在解决集成挑战的已知设计模式。 阅读此书后&#xff0c;您将可以设计集成解决方案。 EIP&#xff08;简而言之&#xff09;是已知的设计模式&#xff0c;可为应用程序集成过程中遇到的问题/问题提供解决方案…

手把手教你Chrome浏览器安装Postman(含下载云盘链接)【转载】

转载自&#xff1a;http://www.ljwit.com/archives/php/278.html 说明&#xff1a; Postman不多介绍&#xff0c;是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。本文主要介绍下安装过程。 本文使用的是解压文件直接进行安装。是比较快速有效的安装方式&#xff0c;…