/** * Copyright (c) 2013 Eclectic Logic LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.eclecticlogic.whisper.logback; import java.util.Iterator; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.Appender; import com.eclecticlogic.whisper.core.Digest; import com.eclecticlogic.whisper.core.ParameterUtil; import com.eclecticlogic.whisper.core.WhisperManager; import com.eclecticlogic.whisper.spi.Message; import com.eclecticlogic.whisper.spi.MessageWriter; /** * @author kabram * */ public class WhisperAppender extends AbstractWhisperAppender implements MessageWriter<ILoggingEvent> { private WhisperManager<ILoggingEvent> whisperManager; private String digestLoggerName; private String suppressAfter; private String expireAfter; private String digestFrequency; public String getSuppressAfter() { return suppressAfter; } public void setSuppressAfter(String suppressionAfter) { this.suppressAfter = suppressionAfter; } public String getExpireAfter() { return expireAfter; } public void setExpireAfter(String expireAfter) { this.expireAfter = expireAfter; } public String getDigestFrequency() { return digestFrequency; } public void setDigestFrequency(String digestFrequency) { this.digestFrequency = digestFrequency; } public String getDigestLoggerName() { return digestLoggerName; } public void setDigestLoggerName(String digestLoggerName) { this.digestLoggerName = digestLoggerName; } @Override protected void append(ILoggingEvent event) { LogbackMessage message = new LogbackMessage(event); whisperManager.log(message); } @Override public void logThrough(Message<ILoggingEvent> message) { Iterator<Appender<ILoggingEvent>> it = iteratorForAppenders(); while (it.hasNext()) { it.next().doAppend(message.getEvent()); } } @Override public void logDigest(Digest digest) { MDC.put(MDC_DIGEST_SUBJECT, digest.getSubject()); LoggerFactory.getLogger(getDigestLoggerName()).error(digest.getMessage()); } @Override public void start() { super.start(); whisperManager = new WhisperManager<ILoggingEvent>(this, getSuppressAfter(), getExpireAfter()); whisperManager.start(ParameterUtil.digestFrequencyToMillis(getDigestFrequency())); } @Override public void stop() { whisperManager.stop(); super.stop(); } }