2010-01-02 8 views
14

Logback SMTPAppender의 전자 메일 속도를 제한하여 매번 최대 n 분마다 전자 메일을 보내도록 할 수 있습니까?Logback SMTPAppender 제한 속도

Logback appender에 따라 로깅을 설정했지만 구성 방법이나 서브 클래 싱 방법을 잘 모르겠습니다.

숨겨진 기능이 있습니까? 누군가이 문제를 처리하기 위해 하위 클래스를 개발 했습니까?

+1

속도 제한은 풀어야 할 까다로운 문제 중 하나입니다. Logback이 이것을위한 간단한 해결책을 가지고 있다면 나는 놀랄 것이다. – skaffman

+0

@ skaffman, 당신은 복잡성을 설명 할 수 있습니까? 덜 치명적인 오류가 발생한 후에도 치명적인 오류가 발생하는 경우이 오류로 인해 일부 오류가 숨길 수 있음을 이해합니다. – notnoop

답변

6

설명서에 따르면이 작업을 수행하는 방법은 각 이벤트의 타임 스탬프를보고 "충분한 시간"이 경과 한 후에 만 ​​이벤트를 수락하는 EventEvaluator (예제 4.14 및 4.15 참조)를 작성하는 것으로 나타납니다 마지막 사건이 받아 들여졌다.

System.currentTimeMillis를 사용하면 시간 차이를 계산하기 위해 수학을 할 수있는 숫자를 얻을 수 있습니다. http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis%28%29

0

이 기능을 요청하는 jira 항목을 제출하는 것이 좋습니다. 단지 묻는다면 구현 될 가능성이 높습니다.

6

Thorbjørn처럼 어 펜더가 메시지를 전송하는 속도를 제한하는 EventEvaluator을 쉽게 만들 수 있습니다.

그러나 Logicback에서 DuplicateMessageFilter을 지원하는 것으로 밝혀졌습니다. "DuplicateMessageFilter는 별도의 프리젠 테이션을 허용합니다.이 필터는 중복 메시지를 감지하고 반복 횟수를 초과하면 반복되는 메시지를 삭제합니다."

0

, BTW

Logback의 v0.9.26 해주기 SMTPAppender 메시지 버퍼의 크기를 설정할 수있다. 어제까지 최대 256 개의 메시지를 버퍼의 현재 콘텐 트로 보냈습니다.이 메시지는 목에 통증이 있었기 때문에 이메일의 마지막 메시지 만 표시하고 싶었습니다. 따라서이 질문에 대한 나의 해석에 따라 하나의 특정 오류 만 포함하는 주기적으로 반복되는 전자 메일 경고를 구현할 수 있습니다.

http://logback.qos.ch/manual/appenders.html#cyclicBufferSize

재미가있다.

1

동일한 문제를 해결하기 위해 맞춤식 평가판을 작성했습니다. ch.qos.logback.classic.boolex.OnMarkerEvaluator를 확장하지만 다른 평가 기는 기본으로 사용할 수 있습니다. 무음 간격 평가자가 수용 할 수있는 메시지가 많으면이를 무시합니다. 내 사용 사례에서는 괜찮 았지만 다른 행동이 필요한 경우에는 두 번째 체크를 추가하십시오.

public class LimitingOnMarkerEvaluator extends OnMarkerEvaluator { 

    private long lastSend = 0, interval = 0; 

    @Override 
    public boolean evaluate(ILoggingEvent event) throws EvaluationException { 
    if (super.evaluate(event)) { 
     long now = System.currentTimeMillis(); 

     if (now - lastSend > interval) { 
     lastSend = now; 
     return true; 
     } 
    } 

    return false; 
    } 


    public long getInterval() { 
    return interval; 
    } 

    public void setInterval(long interval) { 
    this.interval = interval; 
    } 

}

구성은 최대 하나의 메시지마다 천초 (약 17 분)을 보내 :

<evaluator class="package.LimitingOnMarkerEvaluator"> 
    <marker>FATAL</marker> 
    <interval>1000000</interval> 
</evaluator> 
2
이 도구는 정확히 당신이 원하는 것을 할 것이라고하지만 전혀 스레드 안전 아니에요

: http://code.google.com/p/throttled-smtp-appender/wiki/Usage

나는 threadsafe 버전을 작성했지만 아직 오픈 소스를 공개하지 않았다.

이렇게 좋은 도구를 찾는 데 어려움이있는 이유는 SMTP가 실제 끝점이 아니라는 것입니다. loggly, airbrake 또는 수십 가지 다른 서비스를 사용하거나 logstash와 같은 것을 사용하여 자체 서버를 실행하십시오.

2

새 Whisper 첨부 파일을 살펴보십시오. 똑똑한 억압입니다. Maven 및 github를 통해 사용 가능 here

법적 고지 사항 : 저자입니다.