Logging Log4j日志记录阈值
当前日志记录阈值与日志级别有关(跟踪、调试、信息、警告、错误和致命) 这对我来说还不够。在紧急情况下,我有一个千兆字节的日志从第三方库写入错误类别。我不想打开此日志记录,因为我想查看此问题日志。大多数日志不断重复堆栈跟踪。 所以我想要一种能够Logging Log4j日志记录阈值,logging,log4j,Logging,Log4j,当前日志记录阈值与日志级别有关(跟踪、调试、信息、警告、错误和致命) 这对我来说还不够。在紧急情况下,我有一个千兆字节的日志从第三方库写入错误类别。我不想打开此日志记录,因为我想查看此问题日志。大多数日志不断重复堆栈跟踪。 所以我想要一种能够 1) 如果阈值(kb/秒)被重新设置,则跳过日志(我的意思是当我们 写很多日志-我们可能会跳过一些)或 2) 跳过堆栈跟踪 如果在一段时间内打印了多(n)个stacktrace,则打印 请建议Log4j不要有现成的附件。但您可以执行以下操作: 为使用千
- 1) 如果阈值(kb/秒)被重新设置,则跳过日志(我的意思是当我们 写很多日志-我们可能会跳过一些)或
- 2) 跳过堆栈跟踪 如果在一段时间内打印了多(n)个stacktrace,则打印
请建议Log4j不要有现成的附件。但您可以执行以下操作: 为使用千兆字节数据的第三方库添加附加器(“我有一个千兆字节的日志从第三方库写入错误类别”)。并配置附加器,使其不会使用如此大的存储容量
出于这些目的,您不需要使用企业数据库,例如,您可以使用ApacheDerby,然后所有日志都保留在ApplicationServer中。我认为这个jdbcapender更能满足您的需求 我以前也写过类似的东西(每次最多发送X封邮件)。它会给你一个方向。设置器不是强制性的,但它们允许您通过
log4j.properties
更改默认值
public class LimitedSMTPAppender extends SMTPAppender {
private int limit = 10; // max at 10 mails ...
private int cycleSeconds = 3600; // ... per hour
public void setLimit(int limit) {
this.limit = limit;
}
public void setCycleSeconds(int cycleSeconds) {
this.cycleSeconds = cycleSeconds;
}
private int lastVisited;
private long lastCycle;
protected boolean checkEntryConditions() {
final long now = System.currentTimeMillis();
final long thisCycle = now - (now % (1000L*cycleSeconds));
if (lastCycle!=thisCycle) {
lastCycle = thisCycle;
lastVisited = 0;
}
lastVisited++;
return super.checkEntryConditions() && lastVisited<=limit;
}
}
public class LimitedSMTPAppender扩展了SMTPAppender{
private int limit=10;//最多10封邮件。。。
私有整数周期秒=3600;/…每小时
公共无效设置限制(整数限制){
这个极限=极限;
}
公共无效设置周期秒(整数周期秒){
this.cycleseseconds=cycleseseconds;
}
私人诊所;
私人长周期;
受保护的布尔checkEntryConditions(){
final long now=System.currentTimeMillis();
最终长周期=现在-(现在%(1000升*周期秒));
如果(最后一个周期!=这个周期){
lastCycle=此周期;
lastVisited=0;
}
最后访问++;
返回super.checkEntryConditions()&&lastVisited