/******************************************************************************* * Copyright (c) 2010 Oak Ridge National Laboratory. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html ******************************************************************************/ package org.epics.archiverappliance.engine.model; import org.apache.log4j.Logger; /** Logger that only allows a certain message rate. * @author Kay Kasemir */ public class ThrottledLogger { static private final Logger logger = Logger.getLogger(ThrottledLogger.class); /** Log level */ final private LogLevel level; /** Throttle for the message rate */ final private Throttle throttle; /** <code>true</code> when in the 'be quiet' state */ private boolean throttled = false; /** Initialize * @param level Log level to use * @param seconds_between_messages Seconds between allowed messages */ public ThrottledLogger(final LogLevel level, final double seconds_between_messages) { this.level = level; throttle = new Throttle(seconds_between_messages); } /** Add throttled info message to the plugin log. * @param message   * @return boolean True or False */ @SuppressWarnings("nls") public boolean log( final String message) { if (throttle.isPermitted()) { // OK, show //logger.log(level, message); if(level==LogLevel.error) { logger.error(message); } else if(level==LogLevel.warning) { logger.warn(message); } else if(level==LogLevel.info) { logger.info(message); } throttled = false; return true; } // Show nothing if (throttled) return false; // Last message to be shown for a while String messageTemp= message + "\n... More messsages suppressed for " + PeriodFormat.formatSeconds(throttle.getPeriod()) + " ...."; if(level==LogLevel.error) { logger.error(messageTemp); } else if(level==LogLevel.warning) { logger.warn(messageTemp); } else if(level==LogLevel.info) { logger.info(messageTemp); } throttled = true; return true; } }