/* * 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. */ #if defined(_MSC_VER) #pragma warning ( disable: 4231 4251 4275 4786 ) #endif #include #include #include #include #include #include #include #include #include using namespace log4cxx; using namespace log4cxx::rolling; using namespace log4cxx::helpers; using namespace log4cxx::pattern; IMPLEMENT_LOG4CXX_OBJECT(RollingPolicyBase) RollingPolicyBase::RollingPolicyBase() { } RollingPolicyBase::~RollingPolicyBase() { } void RollingPolicyBase::addRef() const { ObjectImpl::addRef(); } void RollingPolicyBase::releaseRef() const { ObjectImpl::releaseRef(); } void RollingPolicyBase::activateOptions(log4cxx::helpers::Pool& /* pool */) { if (fileNamePatternStr.length() > 0) { parseFileNamePattern(); } else { LogString msg(LOG4CXX_STR("The FileNamePattern option must be set before using FixedWindowRollingPolicy.")); LogString ref1(LOG4CXX_STR("See also http://logging.apache.org/log4j/codes.html#tbr_fnp_not_set")); LogLog::warn(msg); LogLog::warn(ref1); throw IllegalStateException(); } } void RollingPolicyBase::setOption(const LogString& option, const LogString& value) { if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("FILENAMEPATTERN"), LOG4CXX_STR("filenamepattern"))) { fileNamePatternStr = value; } } void RollingPolicyBase::setFileNamePattern(const LogString& fnp) { fileNamePatternStr = fnp; } LogString RollingPolicyBase::getFileNamePattern() const { return fileNamePatternStr; } /** * Parse file name pattern. */ void RollingPolicyBase::parseFileNamePattern() { patternConverters.erase(patternConverters.begin(), patternConverters.end()); patternFields.erase(patternFields.begin(), patternFields.end()); PatternParser::parse(fileNamePatternStr, patternConverters, patternFields, getFormatSpecifiers()); } /** * Format file name. * * @param obj object to be evaluted in formatting, may not be null. * @param buf string buffer to which formatted file name is appended, may not be null. */ void RollingPolicyBase::formatFileName( ObjectPtr& obj, LogString& toAppendTo, Pool& pool) const { std::vector::const_iterator formatterIter = patternFields.begin(); for(std::vector::const_iterator converterIter = patternConverters.begin(); converterIter != patternConverters.end(); converterIter++, formatterIter++) { int startField = toAppendTo.length(); (*converterIter)->format(obj, toAppendTo, pool); (*formatterIter)->format(startField, toAppendTo); } } PatternConverterPtr RollingPolicyBase::getIntegerPatternConverter() const { for(std::vector::const_iterator converterIter = patternConverters.begin(); converterIter != patternConverters.end(); converterIter++) { IntegerPatternConverterPtr intPattern(*converterIter); if (intPattern != NULL) { return *converterIter; } } PatternConverterPtr noMatch; return noMatch; } PatternConverterPtr RollingPolicyBase::getDatePatternConverter() const { for(std::vector::const_iterator converterIter = patternConverters.begin(); converterIter != patternConverters.end(); converterIter++) { DatePatternConverterPtr datePattern(*converterIter); if (datePattern != NULL) { return *converterIter; } } PatternConverterPtr noMatch; return noMatch; }