All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.qos.logback.core.AppenderBase Maven / Gradle / Ivy

There is a newer version: 1.5.12
Show newest version
/**
 * Logback: the reliable, generic, fast and flexible logging framework.
 * Copyright (C) 1999-2015, QOS.ch. All rights reserved.
 *
 * This program and the accompanying materials are dual-licensed under
 * either the terms of the Eclipse Public License v1.0 as published by
 * the Eclipse Foundation
 *
 *   or (per the licensee's choosing)
 *
 * under the terms of the GNU Lesser General Public License version 2.1
 * as published by the Free Software Foundation.
 */
package ch.qos.logback.core;

import java.util.List;

import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.ContextAwareBase;
import ch.qos.logback.core.spi.FilterAttachableImpl;
import ch.qos.logback.core.spi.FilterReply;
import ch.qos.logback.core.status.WarnStatus;

/**
 * 

Sets a skeleton implementation for appenders.

* *

It is coarsely synchronized in its {@link #doAppend(E)} method.

* *

* For more information about this appender, please refer to the online manual * at http://logback.qos.ch/manual/appenders.html#AppenderBase * * @author Ceki Gülcü */ abstract public class AppenderBase extends ContextAwareBase implements Appender { protected volatile boolean started = false; /** * The guard prevents an appender from repeatedly calling its own doAppend * method. */ private boolean guard = false; /** * Appenders are named. */ protected String name; private FilterAttachableImpl fai = new FilterAttachableImpl(); public String getName() { return name; } private int statusRepeatCount = 0; private int exceptionCount = 0; static final int ALLOWED_REPEATS = 5; public synchronized void doAppend(E eventObject) { // WARNING: The guard check MUST be the first statement in the // doAppend() method. // prevent re-entry. if (guard) { return; } try { guard = true; if (!this.started) { if (statusRepeatCount++ < ALLOWED_REPEATS) { addStatus(new WarnStatus("Attempted to append to non started appender [" + name + "].", this)); } return; } if (getFilterChainDecision(eventObject) == FilterReply.DENY) { return; } // ok, we now invoke derived class' implementation of append this.append(eventObject); } catch (Exception e) { if (exceptionCount++ < ALLOWED_REPEATS) { addError("Appender [" + name + "] failed to append.", e); } } finally { guard = false; } } abstract protected void append(E eventObject); /** * Set the name of this appender. */ public void setName(String name) { this.name = name; } public void start() { started = true; } public void stop() { started = false; } public boolean isStarted() { return started; } public String toString() { return this.getClass().getName() + "[" + name + "]"; } public void addFilter(Filter newFilter) { fai.addFilter(newFilter); } public void clearAllFilters() { fai.clearAllFilters(); } public List> getCopyOfAttachedFiltersList() { return fai.getCopyOfAttachedFiltersList(); } public FilterReply getFilterChainDecision(E event) { return fai.getFilterChainDecision(event); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy