java - TurboFilter 用于限制记录的异常 - 不起作用
问题描述
我使用 logback 的 TurboFilter 创建了一个 TurboFilter 来限制异常。
这是代码:
package com.example;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Marker;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.turbo.TurboFilter;
import ch.qos.logback.core.spi.FilterReply;
public class ExceptionFilter extends TurboFilter {
private ConcurrentHashMap<String, Long> exceptionCache = new ConcurrentHashMap<>();
private long suppressTimeInMS = 10 * 60 * 1000;
@Override
public void start() {
super.start();
}
@Override
public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
FilterReply reply = FilterReply.NEUTRAL;
long currTime = System.currentTimeMillis();
if (null != t) {
String exceptionName = t.getClass().getName();
if (!exceptionCache.containsKey(exceptionName)) {
exceptionCache.put(exceptionName, currTime);
reply = FilterReply.NEUTRAL;
}
else {
long previousTime = exceptionCache.get(exceptionName);
if ((currTime - previousTime) >= suppressTimeInMS) {
exceptionCache.put(exceptionName, currTime);
reply = FilterReply.NEUTRAL;
}
else {
reply = FilterReply.DENY;
}
}
}
return reply;
}
public void setSuppressTimeInMS(long suppressTimeInMS) {
this.suppressTimeInMS = suppressTimeInMS;
}
}
在此我创建了一个ConcurrentHashMap
将Exception
作为键和timestamp
值存储的。我没有使用任何Cache
.
逻辑是,suppressTimeInMS
它会阻塞一段时间(通过回复 DENY),一旦结束,它就会允许记录。
但是,它没有按我的预期工作。
因此,如果此实现中存在一些问题,我正在寻找一些输入?
解决方案
推荐阅读
- memory - 为什么操作系统保持在低内存中?
- python - 带有编码设计 ( html ) 文本的 Python 电子邮件
- reactjs - ReactJS 需要帮助找到最大深度超出错误的原因
- ios - Swift:如何更改应用程序内部的语言?
- visual-studio-code - 用VSCode搭建python环境,安装python插件时,VSCode无法识别'python:Select Interpreter'命令
- kubernetes - 如何引用 kubernetes docker-registry
- php - 如何使用 PHP REST API 和使用 JSON 格式的 REACT js 上传图像?
- r - 转换时态数据时不需要的 NA
- python -
为什么我的 python 代码没有显示按钮? - firebase-realtime-database - 使用 Flutter 监听特定 Firestore 文档中的两个准确(但独立)的字段