强大的技术团队网站建设,门户网站开发用什么框架好,做网站前怎么写文档,简单的网站类型有哪些内容我们的开发团队希望在生产系统出现问题时尽快得到通知#xff0c;这是一个每天为成千上万的客户提供服务的关键Java Web应用程序。 这个想法是让它在出现太多错误时向我们发送电子邮件#xff0c;这些错误通常表明数据库#xff0c;外部Web服务存在问题#xff0c;或者应用… 我们的开发团队希望在生产系统出现问题时尽快得到通知这是一个每天为成千上万的客户提供服务的关键Java Web应用程序。 这个想法是让它在出现太多错误时向我们发送电子邮件这些错误通常表明数据库外部Web服务存在问题或者应用程序本身确实存在问题。 在本文中我想介绍一个简单的解决方案我们已经使用基于Stats4j和SMTPAppender的自定义Log4J Appender实现了这比您预期的配置和故障排除更加困难。 挑战 我们在日志方面面临以下挑战 不幸的是有一定数量的例外情况是正常的客户选择没有结果的搜索条件外部服务的暂时性不重要的中断等因此我们当然不希望被发送垃圾邮件。 因此解决方案必须具有可配置的阈值并且仅在超出阈值时发送警报。 故障率应该在可配置的时间内进行计算足够长的时间不会因几分钟的中断而触发警报而足够短的时间可以在发生严重事件时尽快通知团队。 发送警报后一段时间内最好在解决原始问题之前不应再发送其他警报我们不希望因为我们已经知道的问题而被发送垃圾邮件。 解决方案 我们基于Lara DAbreo的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.classnamenet.sourceforge.stat4j.calculators.RunningRate
# Period is in [ms] 1000 * 60 * 10 10 min:
calculator.minuteRate.period600000statistic.RunningErrorRate.descriptionErrors per 10 minutes
statistic.RunningErrorRate.calculatorminuteRate
# Regular expression to match throwable.toString - original log message
statistic.RunningErrorRate.first.match.*Exception.*# Error Rate
alert.TooManyErrorsRecently.descriptionToo many errors in the log
alert.TooManyErrorsRecently.statisticRunningErrorRate
alert.TooManyErrorsRecently.warn 3
alert.TooManyErrorsRecently.critical 10
alert.TooManyErrorsRecently.categoryalerts
# Ignore following warnings (or criticals, after the first critical) for the given amount of time:
# 1000 * 60 * 100 100 min
alert.TooManyErrorsRecently.quietperiod6000000 重要的配置参数是 Calculator.minuteRate.period 以毫秒为单位–在此期间计算错误在其结束时重置计数 合理的值可能是10分钟 alert.TooManyErrorsRecently.warn和alert.TooManyErrorsRecently.critical –在此期间遇到如此多的错误时触发警报。 合理的值取决于您应用程序的正常错误率 alert.TooManyErrorsRecently.quietperiod 以毫秒为单位–在此期间在持续失败的情况下不要发送进一步的警报以防止垃圾邮件 合理的值取决于您通常解决问题的速度对我来说1个小时似乎还可以 Log4J配置 现在我们需要告诉Log4J使用Stat4j附加程序来计算错误发生次数并通过电子邮件发送警报 log4j.rootCategoryDEBUG, 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.Stat4jAppendernet.sourceforge.stat4j.log4j.Stat4jAppender
log4j.appender.Stat4jAppender.ThresholdERROR
# For configuration see stat4j.properties## EmailAlertsAppender
# BEWARE: SMTPAppender ignores its Thresholds and only evers sends ERROR or higher messages
log4j.category.alertsERROR, EmailAlertsAppender
log4j.appender.EmailAlertsAppenderorg.apache.log4j.net.SMTPAppender
log4j.appender.EmailAlertsAppender.Todummyexample.com
# BEWARE: The address below must have a valid domain or some receivers will reject it (e.g. GMail)
log4j.appender.EmailAlertsAppender.Fromnoreply-stat4jgoogle.no
log4j.appender.EmailAlertsAppender.SMTPHost172.20.20.70
log4j.appender.EmailAlertsAppender.BufferSize1
log4j.appender.EmailAlertsAppender.Subject[Stat4j] Too many exceptions in log
log4j.appender.EmailAlertsAppender.layoutorg.apache.log4j.PatternLayout
log4j.appender.EmailAlertsAppender.layout.ConversionPattern%d{ISO8601} %-5p %X{clientIdentifier} %c %x - %m%n 注释 8指定Stat4J附加程序 9仅向Stat4J发送错误我们对不太严重的异常不感兴趣 14“警报”是Stat4jAppender用于记录警报的日志类别与您通过Logger.getLogger“ alerts”创建的类别相同 如前所述SMTPAppender将不考虑配置而仅处理错误和更高级别 SMTPAppender的问题 使SMTPAppender工作非常棘手。 一些陷阱 SMTPAppender忽略所有非ERROR或更高级别的日志而不考虑您如何设置阈值 如果您指定了“不存在的发件人”域则某些收件人的邮件服务器可以将其作为垃圾邮件删除例如GMail 要发送电子邮件您当然需要mail.jar对于旧版JVM也需要activation.jar这是Tomcat的说明。 一个$ 100的提示要对其进行调试请在调试模式下运行您的应用程序并在javax.mail.Transportsend上设置方法断点不需要源代码然后在其中设置this.session.debug为如果为true则会在服务器日志中获得以下SMTP通信的非常详细的日志。 边注 本文基于Log4J的事实并不意味着我会亲自选择它它只是随项目一起提供的。 我至少会考虑使用更新的和闪亮的Logback代替:-)。 结论 Stat4j SMTPAppender是基于日志和电子邮件的相当灵活的自行完成警报系统的良好基础。 您可以使用Hyperic HQ plus开箱即用地实现相同的功能。 参考 当错误日志太多时聚集错误日志以发送警告电子邮件–来自The Holy Java Blog的 JCG合作伙伴 JakubHolý的 Log4jStat4jSMTPAppender 。 相关文章 首先记录异常的根本原因 Java日志混乱 正确记录应用程序的10个技巧 使用Java发送电子邮件 SpringQuartz和JavaMail集成教程 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例 Java教程和Android教程列表 翻译自: https://www.javacodegeeks.com/2011/10/log4j-stat4j-smtpappender-integration.html