_stat64获取错误_Log4j,Stat4j,SMTPAppender集成–汇总错误日志以发送过多电子邮件...

_stat64获取错误

我们的开发团队希望在生产系统出现问题时尽快得到通知,这是一个每天为成千上万的客户提供服务的关键Java Web应用程序。 想法是让它在出现太多错误时向我们发送电子邮件,这些错误通常表示数据库,外部Web服务有问题,或者应用程序本身确实存在问题。

在本文中,我想介绍一个简单的解决方案,我们已经使用基于Stats4j和SMTPAppender的自定义Log4J Appender实现了(这比您预期的配置和故障排除更加困难)。

挑战

我们在日志方面面临以下挑战:

  • 不幸的是,有一定数量的例外情况是正常的(客户选择没有结果的搜索条件,外部服务的暂时性,不重要的中断等),因此我们当然不希望被发送垃圾邮件。 因此,解决方案必须具有可配置的阈值,并且仅在超出阈值时发送警报。
  • 故障率应在可配置的时间内进行计算(由于几分钟的中断而导致的故障时间足够长,不会触发警报,而在发生严重事件时,也要足够短的时间使团队尽快得到通知)。
  • 发送警报后,一段时间内(最好在解决原始问题之前)不应再发送其他警报,我们不想因为已经知道的问题而被发送垃圾邮件。

解决方案

我们基于Lara D'Abreo的Stat4J解决方案,该解决方案提供了一个自定义Log4J附加程序,该附加程序使用日志来计算可配置的度量,并在超出警告或严重阈值时触发警报。 它有几年历史了,具有alpha质量(关于通用性和灵活性)的开源库,幸运的是,它足够简单,可以轻松修改以适应自己的需求。

因此,我们对Stat4J进行了调整,以在警报数量超过阈值时生成警报,此后保持安静,然后将其与Log4J SMTPAppender结合使用, 后者侦听警报并将其通过电子邮件发送给团队。

Stat4J调整

Stat4J的关键组件包括用于Log4J的Stat4jAppender,用于汇总单个日志的计算器(度量)(例如,通过对它们进行计数或从中提取一些数字),用于定义要通过正则表达式考虑的日志以及如何处理它们的统计信息。引用计算器,并最终在统计信息的值超出其限制时发出警报并记录警告。 您可以在介绍Stat4J的文章中了解更多信息 。

我们已经实现了一个自定义的度量计算器, RunningRate (以计算最近N分钟内的失败数),并修改了Stat4J,如下所示:

  • 我们增强了Alert,以支持新属性quietperiod,以便一旦触发,随后的警报将在该持续时间内被忽略(除非以前的警报只是警告,而新警报是关键警报)
  • 我们修改了附加器, 将日志的Throwable与日志消息一起包含,然后将其传递给各个统计计算器,以便我们可以更精确地过滤要计数的内容
  • 最后,我们修改了Alert,将警报记录为错误而不是警告,以使SMTPAppender不会忽略它们

从GitHub (我们的源代码或编译的jar )中获取我们修改后的Stat4j 。 免责声明:这是一天的工作,我对代码并不感到骄傲。

Stat4J配置

以stat4j.properties为例 ,将其放在类路径中。 它已经配置了正确的计算器,统计信息和警报。 看到这一部分:

### JAKUB HOLY - MY CONFIG
calculator.minuteRate.classname=net.sourceforge.stat4j.calculators.RunningRate
# Period is in [ms] 1000 * 60 * 10 = 10 min:
calculator.minuteRate.period=600000statistic.RunningErrorRate.description=Errors per 10 minutes
statistic.RunningErrorRate.calculator=minuteRate
# Regular expression to match "<throwable.toString> <- <original log message>"
statistic.RunningErrorRate.first.match=.*Exception.*# Error Rate
alert.TooManyErrorsRecently.description=Too many errors in the log
alert.TooManyErrorsRecently.statistic=RunningErrorRate
alert.TooManyErrorsRecently.warn= >=3
alert.TooManyErrorsRecently.critical= >=10
alert.TooManyErrorsRecently.category=alerts
# Ignore following warnings (or criticals, after the first critical) for the given amount of time:
# 1000 * 60 * 100 = 100 min
alert.TooManyErrorsRecently.quietperiod=6000000

重要的配置参数是

  • Calculator.minuteRate.period (以毫秒为单位)–在此期间计算错误,在其结束时重置计数; 合理的值可能是10分钟
  • alert.TooManyErrorsRecently.warnalert.TooManyErrorsRecently.critical –在此期间遇到太多错误时触发警报; 合理的值取决于您的应用程序的正常错误率
  • alert.TooManyErrorsRecently.quietperiod (以毫秒为单位)–在此期间,在持续失败的情况下,请勿发送进一步的警报以防止垃圾邮件; 合理的值取决于您通常解决问题的速度,对我来说1个小时似乎还可以

Log4J配置

现在,我们需要告诉Log4J使用Stat4j附加程序来计算错误发生次数并通过电子邮件发送警报:

log4j.rootCategory=DEBUG, Console, FileAppender, Stat4jAppender
...
### Stat4jAppender & EmailAlertsAppender ###
# Collects statistics about logs and sends alerts when there
# were too many failures in cooperation with the EmailAlertsAppender## Stat4jAppender
log4j.appender.Stat4jAppender=net.sourceforge.stat4j.log4j.Stat4jAppender
log4j.appender.Stat4jAppender.Threshold=ERROR
# For configuration see stat4j.properties## EmailAlertsAppender
# BEWARE: SMTPAppender ignores its Thresholds and only evers sends ERROR or higher messages
log4j.category.alerts=ERROR, EmailAlertsAppender
log4j.appender.EmailAlertsAppender=org.apache.log4j.net.SMTPAppender
log4j.appender.EmailAlertsAppender.To=dummy@example.com
# BEWARE: The address below must have a valid domain or some receivers will reject it (e.g. GMail)
log4j.appender.EmailAlertsAppender.From=noreply-stat4j@google.no
log4j.appender.EmailAlertsAppender.SMTPHost=172.20.20.70
log4j.appender.EmailAlertsAppender.BufferSize=1
log4j.appender.EmailAlertsAppender.Subject=[Stat4j] Too many exceptions in log
log4j.appender.EmailAlertsAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.EmailAlertsAppender.layout.ConversionPattern=%d{ISO8601} %-5p %X{clientIdentifier} %c %x - %m%n

注释

  • #8指定Stat4J附加程序
  • #9仅向Stat4J发送ERROR,我们对不太严重的异常不感兴趣
  • #14“警报”是Stat4jAppender用于记录警报的日志类别(与您通过Logger.getLogger(“ alerts”)创建的类别)相同; 如前所述,SMTPAppender将不考虑配置而仅处理错误和更高级别的错误

SMTPAppender的问题

使SMTPAppender工作非常棘手。 一些陷阱:

  • SMTPAppender忽略所有非ERROR或更高级别的日志,而不考虑您如何设置阈值
  • 如果您指定不存在的“发件人”域,则某些收件人的邮件服务器可以将其删除为垃圾邮件(例如GMail)
  • 要发送电子邮件,您当然需要mail.jar(对于较早的JVM,还需要activation.jar),这是Tomcat的说明。

还有一个100美元的提示:要对其进行调试,请在调试模式下运行您的应用程序,并在javax.mail.Transport#send(不需要源代码)上设置方法断点,然后在该位置将this.session.debug设置为如果为true,则会在服务器日志中获得以下SMTP通信的非常详细的日志。

边注

本文基于Log4J的事实并不意味着我会亲自选择它,而是随项目一起提供的。 我至少会考虑使用更新的和闪亮的Logback代替:-)。

结论

Stat4j + SMTPAppender是基于日志和电子邮件的相当灵活的自行执行警报系统的良好基础。 您可以使用Hyperic HQ plus开箱即用地实现相同的功能。

参考: 当错误日志太多时,聚集错误日志以发送警告电子邮件–来自The Holy Java Blog的 JCG合作伙伴 JakubHolý的 Log4j,Stat4j,SMTPAppender 。

相关文章 :
  • 首先记录异常的根本原因
  • Java日志混乱
  • 正确记录应用程序的10个技巧
  • 使用Java发送电子邮件
  • Spring,Quartz和JavaMail集成教程
  • 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/10/log4j-stat4j-smtpappender-integration.html

_stat64获取错误

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

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

相关文章

Kali2021修改更新源

本次演示三种环境更换更新源 Xfce4版本 KDE版本 命令行版本 更新源 #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

java面试中jvm执行子系统详细分析(三)

什么是jvm? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机…

java中菜单分几级_JavaWeb三级菜单分类查询详解

废话不多说&#xff0c;直接贴代码&#xff1a;dao层代码&#xff1a;mapper&#xff1a;ListselectByParentId(Integer id);mapper.xmlselectfrom easybuy_product_categorywhere parentId #{parentId,jdbcTypeINTEGER}Test:import cn.hd.entity.ProductCategory;import cn.h…

使用Javaslang进行Java 8中的函数式编程

我们非常高兴地在jOOQ博客上宣布一个客座帖子&#xff0c;该帖子由HSH Nordbank的高级软件工程师&#xff0c;三个孩子的父亲&#xff0c; Daniel Dietrich撰写。 他目前作为项目负责人和首席开发人员为金融产品创建定价框架。 除工作外&#xff0c;他还对编程语言&#xff0c…

HFS远程命令执行漏洞复现

漏洞程序下载地址:Http File Server 这里说一下&#xff0c;在Windows server 2003中复现时&#xff0c;我直接使用Administrator用户登录&#xff0c;然后复现&#xff0c;未出现权限问题。再Windows 10中尝试复现时发现权限不足&#xff0c;需要以管理员权限执行漏洞程序。 运…

HTML标签速查表

有时候,学习的前端的标签太多,容易记不牢,这里整理一份标签速查表,便于查阅。不区分html或html5.

Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示

定义依赖属性作为datagrid的数据源 protected static readonly DependencyProperty ViewLogsProperty DependencyProperty.Register("ViewLogs", typeof(ObservableCollection<RMSReportEvent>), typeof(LogViewer), new PropertyMetadata(null)); protected …

java解析java源码_JAVA语言-Java源码解析-Stack源码分析

一、简介stack类图.png栈是数据结构中一种很重要的数据结构类型&#xff0c;因为栈的后进先出功能是实际的开发中有很多的应用场景。Java API中提供了栈(Stacck)的实现。Stack类继承了Vector类&#xff0c;而Vector类继承了AbstractList抽象类&#xff0c;实现了List类&#xf…

渗透测试神器CS(4.0)的使用

CS CS简介CS功能安装CSCS的基本使用深入标题介绍 Beacon Commands基础操作演示 CS简介 CS 是Cobalt Strike的简称&#xff0c;是一款渗透测试神器&#xff0c;常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用&#xff0c;它分为客户端与服务端&…

UTF-8和GBK有啥区别?

粉丝求助: 如何解决: 把编辑器和浏览器的字符集统一设置成utf-8或者gbk即可。 主要区别: 1.GBK是在bai国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不du是国家标准)。zhiGBK编码dao专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。 2. UTF-8 编码是…

服务osgi_OSGi –具有服务的简单Hello World

服务osgi在本文中&#xff0c;我们将使用OSGi开发一个简单的Hello World应用程序。 我们将使用Felix作为OSGi容器 。 在下一篇文章中&#xff0c;我们将继续使用该应用程序&#xff0c;并使用Spring Dynamic Modules对其进行改进。 为了使开发有趣&#xff0c;我们将创建两个捆…

Java反射(Reflection)

基本概念 在Java运行时环境中&#xff0c;对于任意一个类&#xff0c;能否知道这个类有哪些属性和方法&#xff1f;对于任意一个对象&#xff0c;能否调用它的任意一个方法&#xff1f; 答案是肯定的。 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射&…

超详细的MySQL三万字总结

文章目录 MySQL基础数据库的介绍数据库概述数据的存储方式数据库的概念常见数据库排行榜 数据库的安装与卸载数据库的安装数据库的卸载 数据库服务的启动与登录Windows 服务方式启动DOS 命令方式启动控制台连接数据库SQLyog 图形化工具——客户端使用 SQLyog 登录数据库数据库…

map转字符串数组中 php_js将map转换成数组

linux中oops信息的调试及栈回溯【转】本文转载自:http://blog.csdn.net/kangear/article/details/8217329 ...linux 2&period;6 驱动笔记(一)本文作为linux 2.6 驱动笔记,记录环境搭建及linux基本内核模块编译加载. 环境搭建: 硬件:OK6410开发板 目标板操作系统:linux 2.6…

你要的能做出炫酷图表的网站来啦

不需要多高深的技术&#xff0c;也不需要多长时间&#xff0c;分分钟让小白都能做出超好看的图表~ 1.DataV DataV 是阿里云出品的在线可视化工具&#xff0c;可以将超多数据&#xff0c;放在一块大屏上 2.网易有数 网易有数的特点是&#xff0c;编辑页面自由度非常高&#x…

ecshop获取客户端操作系统

<?php /*** 获得客户端的操作系统** access private* return void*/ function get_os() {if (empty($_SERVER[HTTP_USER_AGENT])){return Unknown;}$agent strtolower($_SERVER[HTTP_USER_AGENT]);$os ;if (strpos($agent, win) ! false){if (strpos($agent, nt 5.1…

求有向图中两点最短距离java_算法题解:求有向图中的最短路径(JAVA+DFS算法实现)...

求有向图中的最短路径(JAVADFS算法实现)问题描述给定一个有向图&#xff0c;如下图所示&#xff0c;求从1号顶点到5号顶点的最短路径。输入数据格式为第一行输入顶点数和边数&#xff0c;从第二行开始每一行输入3个整数&#xff0c;分别代表连接顶点的边和权重。例如&#xff1…

B站学习资源汇总

一个B站就足够解决绝大多数学习问题。 AI入门 1、Crash Course AI https://space.bilibili.com/276373762/channel/detail?cid=101907 课程介绍:该课程出自Crash Course,首发YouTube,单个视频时长均在10分钟左右。视频节奏非常好,语速偏快,适合下饭时间入门了解。主讲…

30个Java入门技巧和最佳实践

Java是最流行的编程语言之一-无论是Win应用程序&#xff0c;Web应用程序&#xff0c;移动&#xff0c;网络&#xff0c;消费电子产品&#xff0c;机顶盒设备&#xff0c;Java随处可见。 在Java上运行的设备超过30亿。 据甲骨文称 &#xff0c;正在使用50亿张Java卡。 超过900…

Postman使用详解

一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的&#xff0c;用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网…