blob: 1353dae917259466b075189e0a5ace98885cef75 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.log4j;
import org.apache.log4j.spi.ErrorHandler;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.OptionHandler;
/**
* The base class for Appenders in Log4j 1. Appenders constructed using this are ignored in Log4j 2.
*/
public abstract class AppenderSkeleton implements Appender, OptionHandler {
protected Layout layout;
protected String name;
protected Priority threshold;
protected ErrorHandler errorHandler = new NoOpErrorHandler();
protected Filter headFilter;
protected Filter tailFilter;
protected boolean closed = false;
/**
* Create new instance.
*/
public AppenderSkeleton() {
super();
}
protected AppenderSkeleton(final boolean isActive) {
super();
}
@Override
public void activateOptions() {
}
@Override
public void addFilter(final Filter newFilter) {
if(headFilter == null) {
headFilter = tailFilter = newFilter;
} else {
tailFilter.setNext(newFilter);
tailFilter = newFilter;
}
}
protected abstract void append(LoggingEvent event);
@Override
public void clearFilters() {
headFilter = tailFilter = null;
}
@Override
public void finalize() {
}
@Override
public ErrorHandler getErrorHandler() {
return this.errorHandler;
}
@Override
public Filter getFilter() {
return headFilter;
}
public final Filter getFirstFilter() {
return headFilter;
}
@Override
public Layout getLayout() {
return layout;
}
@Override
public final String getName() {
return this.name;
}
public Priority getThreshold() {
return threshold;
}
public boolean isAsSevereAsThreshold(final Priority priority) {
return ((threshold == null) || priority.isGreaterOrEqual(threshold));
}
/**
* This method is never going to be called in Log4j 2 so there isn't much point in having any code in it.
* @param event The LoggingEvent.
*/
@Override
public void doAppend(final LoggingEvent event) {
append(event);
}
/**
* Set the {@link ErrorHandler} for this Appender.
*
* @since 0.9.0
*/
@Override
public synchronized void setErrorHandler(final ErrorHandler eh) {
if (eh != null) {
this.errorHandler = eh;
}
}
@Override
public void setLayout(final Layout layout) {
this.layout = layout;
}
@Override
public void setName(final String name) {
this.name = name;
}
public void setThreshold(final Priority threshold) {
this.threshold = threshold;
}
public static class NoOpErrorHandler implements ErrorHandler {
@Override
public void setLogger(final Logger logger) {
}
@Override
public void error(final String message, final Exception e, final int errorCode) {
}
@Override
public void error(final String message) {
}
@Override
public void error(final String message, final Exception e, final int errorCode, final LoggingEvent event) {
}
@Override
public void setAppender(final Appender appender) {
}
@Override
public void setBackupAppender(final Appender appender) {
}
}
}