| /* |
| * 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 <log4cxx/logstring.h> |
| #include <log4cxx/rolling/rollingpolicybase.h> |
| #include <log4cxx/pattern/formattinginfo.h> |
| #include <log4cxx/helpers/stringhelper.h> |
| #include <log4cxx/helpers/loglog.h> |
| #include <log4cxx/helpers/exception.h> |
| #include <log4cxx/pattern/patternparser.h> |
| #include <log4cxx/pattern/integerpatternconverter.h> |
| #include <log4cxx/pattern/datepatternconverter.h> |
| |
| 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<FormattingInfoPtr>::const_iterator formatterIter = |
| patternFields.begin(); |
| |
| for (std::vector<PatternConverterPtr>::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<PatternConverterPtr>::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<PatternConverterPtr>::const_iterator |
| converterIter = patternConverters.begin(); |
| converterIter != patternConverters.end(); |
| converterIter++) |
| { |
| DatePatternConverterPtr datePattern(*converterIter); |
| |
| if (datePattern != NULL) |
| { |
| return *converterIter; |
| } |
| } |
| |
| PatternConverterPtr noMatch; |
| return noMatch; |
| } |
| |
| |