diff options
Diffstat (limited to 'src/main/cpp/filterbasedtriggeringpolicy.cpp')
-rw-r--r-- | src/main/cpp/filterbasedtriggeringpolicy.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/main/cpp/filterbasedtriggeringpolicy.cpp b/src/main/cpp/filterbasedtriggeringpolicy.cpp new file mode 100644 index 0000000..549d1e4 --- /dev/null +++ b/src/main/cpp/filterbasedtriggeringpolicy.cpp @@ -0,0 +1,95 @@ +/* + * 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. + */ + +#include <log4cxx/logstring.h> +#include <log4cxx/rolling/filterbasedtriggeringpolicy.h> +#include <log4cxx/spi/filter.h> + +using namespace log4cxx; +using namespace log4cxx::rolling; +using namespace log4cxx::spi; + +IMPLEMENT_LOG4CXX_OBJECT(FilterBasedTriggeringPolicy) + +FilterBasedTriggeringPolicy::FilterBasedTriggeringPolicy() { +} + + +FilterBasedTriggeringPolicy::~FilterBasedTriggeringPolicy() { +} + + +bool FilterBasedTriggeringPolicy::isTriggeringEvent( + Appender* /* appender */, + const log4cxx::spi::LoggingEventPtr& event, + const LogString& /* filename */, + size_t /* fileLength */ ) { + if (headFilter == NULL) { + return false; + } + for(log4cxx::spi::FilterPtr f = headFilter; f != NULL; f = f->getNext()) { + switch(f->decide(event)) { + case Filter::DENY: + return false; + + case Filter::ACCEPT: + return true; + + case Filter::NEUTRAL: + break; + } + } + return true; +} + +/** + * Add a filter to end of the filter list. + * @param newFilter filter to add to end of list. + */ +void FilterBasedTriggeringPolicy::addFilter(const log4cxx::spi::FilterPtr& newFilter) { + if (headFilter == NULL) { + headFilter = newFilter; + tailFilter = newFilter; + } else { + tailFilter->setNext(newFilter); + tailFilter = newFilter; + } +} + +void FilterBasedTriggeringPolicy::clearFilters() { + log4cxx::spi::FilterPtr empty; + headFilter = empty; + tailFilter = empty; +} + +log4cxx::spi::FilterPtr& FilterBasedTriggeringPolicy::getFilter() { + return headFilter; +} + +/** + * Prepares the instance for use. + */ +void FilterBasedTriggeringPolicy::activateOptions(log4cxx::helpers::Pool& p) { + for(log4cxx::spi::FilterPtr f = headFilter; f != NULL; f = f->getNext()) { + f->activateOptions(p); + } +} + +void FilterBasedTriggeringPolicy::setOption(const LogString& /* option */, const LogString& /* value */ ) { +} + + |