carnold 2005/02/21 14:46:48
Modified: . build.xml
include/log4cxx/helpers patternconverter.h patternparser.h
src Makefile.am cacheddateformat.cpp
patternconverter.cpp patternparser.cpp
simpledateformat.cpp
tests/src/pattern num343patternconverter.cpp
num343patternconverter.h patternparsertestcase.cpp
Added: include/log4cxx/helpers namedpatternconverter.h
src namedpatternconverter.cpp
Log:
LOGCXX-49: Pattern parser refresh, Windows iter
Revision Changes Path
1.45 +1 -0 logging-log4cxx/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/logging-log4cxx/build.xml,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- build.xml 18 Feb 2005 17:18:53 -0000 1.44
+++ build.xml 21 Feb 2005 22:46:48 -0000 1.45
@@ -812,6 +812,7 @@
unless="apriconv.lib.dir"/>
<libset libs="${cppunit.lib.name}${lib-suffix}"
dir="${cppunit.lib.dir}" if="cppunit.lib.dir"/>
<libset libs="${cppunit.lib.name}${lib-suffix}"
unless="cppunit.lib.dir"/>
+ <libset libs="advapi32 odbc32 ws2_32" if="is-windows"/>
<includepath path="${include.dir}"/>
<includepath path="/usr/include/libxml2" if="is-unix"/>
1.17 +6 -2
logging-log4cxx/include/log4cxx/helpers/patternconverter.h
Index: patternconverter.h
===================================================================
RCS file:
/home/cvs/logging-log4cxx/include/log4cxx/helpers/patternconverter.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- patternconverter.h 26 Dec 2004 07:31:52 -0000 1.16
+++ patternconverter.h 21 Feb 2005 22:46:48 -0000 1.17
@@ -19,7 +19,8 @@
#include <log4cxx/logstring.h>
#include <log4cxx/helpers/objectptr.h>
-#include <log4cxx/helpers/objectimpl.h>
+#include <log4cxx/helpers/objectimpl.h>
+#include <vector>
namespace log4cxx
{
@@ -75,7 +76,10 @@
A template method for formatting in a converter
specific way.
*/
virtual void format(LogString& sbuf,
- const spi::LoggingEventPtr& e,
log4cxx::helpers::Pool& pool) const;
+ const spi::LoggingEventPtr& e,
log4cxx::helpers::Pool& pool) const;
+
+ void setFormattingInfo(const FormattingInfo&);
+ virtual void setOptions(const
std::vector<LogString>& options);
}; // class PatternConverter
} // namespace helpers
1.21 +32 -11 logging-log4cxx/include/log4cxx/helpers/patternparser.h
Index: patternparser.h
===================================================================
RCS file: /home/cvs/logging-log4cxx/include/log4cxx/helpers/patternparser.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- patternparser.h 18 Feb 2005 17:18:53 -0000 1.20
+++ patternparser.h 21 Feb 2005 22:46:48 -0000 1.21
@@ -21,7 +21,7 @@
#include <log4cxx/helpers/objectptr.h>
#include <log4cxx/helpers/objectimpl.h>
#include <log4cxx/helpers/formattinginfo.h>
-#include <log4cxx/helpers/patternconverter.h>
+#include <log4cxx/helpers/namedpatternconverter.h>
#include <log4cxx/helpers/dateformat.h>
#include <log4cxx/helpers/relativetimedateformat.h>
#include <map>
@@ -41,10 +41,28 @@
return new classname(formattingInfo, options); } \
private: \
classname(const classname&); \
-classname& operator=(const classname&); \
+classname& operator=(const classname&);
#define END_DEFINE_PATTERN_CONVERTER(classname) };
+
+#define DEFINE_NAMED_PATTERN_CONVERTER(classname) \
+class LOG4CXX_EXPORT classname : public NamedPatternConverter { \
+public: \
+classname(const FormattingInfo& formattingInfo, \
+ const std::vector<LogString>& options); \
+virtual LogString getFullyQualifiedName( \
+ const spi::LoggingEventPtr& event) const; \
+static PatternConverter* newInstance( \
+ const FormattingInfo& formattingInfo, \
+ const std::vector<LogString>& options) { \
+ return new classname(formattingInfo, options); } \
+private: \
+classname(const classname&); \
+classname& operator=(const classname&);
+
+#define END_DEFINE_NAMED_PATTERN_CONVERTER(classname) };
+
namespace log4cxx
{
@@ -72,7 +90,8 @@
typedef PatternConverter* (*PatternConverterFactory)(
const FormattingInfo& info,
const std::vector<LogString>& options);
- typedef std::map<LogString, PatternConverterFactory>
PatternConverterMap;
+ typedef std::map<LogString, PatternConverterFactory>
InternalPatternConverterMap;
+ typedef std::map<LogString, LogString> PatternConverterMap;
private:
enum {
@@ -83,7 +102,7 @@
MIN_STATE = 4,
MAX_STATE = 5 } state;
- static const PatternConverterMap& getGlobalRulesRegistry();
+ static const InternalPatternConverterMap&
getGlobalRulesRegistry();
LogString currentLiteral;
int patternLength;
@@ -119,7 +138,9 @@
private:
- PatternConverterFactory findConverterClass(const
LogString& converterId);
+ PatternConverterPtr createConverter(const LogString&
converterId,
+ const FormattingInfo& formattingInfo,
+ const std::vector<LogString>& options) const;
void finalizeConverter(logchar c);
@@ -130,7 +151,6 @@
static void logError(const LogString& msg);
static void logWarn(const LogString& msg);
- static int getPrecision(const
std::vector<LogString>& options);
//
---------------------------------------------------------------------
@@ -168,12 +188,11 @@
DEFINE_PATTERN_CONVERTER(MethodLocationPatternConverter)
END_DEFINE_PATTERN_CONVERTER(MethodLocationPatternConverter)
- DEFINE_PATTERN_CONVERTER(ClassNamePatternConverter)
-
END_DEFINE_PATTERN_CONVERTER(ClassNamePatternConverter)
+
DEFINE_NAMED_PATTERN_CONVERTER(ClassNamePatternConverter)
+
END_DEFINE_NAMED_PATTERN_CONVERTER(ClassNamePatternConverter)
- DEFINE_PATTERN_CONVERTER(LoggerPatternConverter)
- int precision;
- END_DEFINE_PATTERN_CONVERTER(LoggerPatternConverter)
+
DEFINE_NAMED_PATTERN_CONVERTER(LoggerPatternConverter)
+
END_DEFINE_NAMED_PATTERN_CONVERTER(LoggerPatternConverter)
DEFINE_PATTERN_CONVERTER(MessagePatternConverter)
END_DEFINE_PATTERN_CONVERTER(MessagePatternConverter)
@@ -209,5 +228,7 @@
#undef DEFINE_PATTERN_CONVERTER
#undef END_DEFINE_PATTERN_CONVERTER
+#undef DEFINE_NAMED_PATTERN_CONVERTER
+#undef END_DEFINE_NAMED_PATTERN_CONVERTER
#endif //_LOG4CXX_HELPER_PATTERN_PARSER_H
1.1
logging-log4cxx/include/log4cxx/helpers/namedpatternconverter.h
Index: namedpatternconverter.h
===================================================================
/*
* Copyright 1999,2004 The Apache Software Foundation.
*
* Licensed 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.
*/
#ifndef _LOG4CXX_HELPER_NAMED_PATTERN_CONVERTER_H
#define _LOG4CXX_HELPER_NAMED_PATTERN_CONVERTER_H
#include <log4cxx/helpers/patternconverter.h>
#include <vector>
namespace log4cxx {
namespace helpers {
/**
*
* Base class for other pattern converters which can return only
parts of their name.
*
* @author Ceki Gülcü
* @author Curt Arnold
*/
class NamedPatternConverter : public PatternConverter {
private:
int precision;
public:
DECLARE_ABSTRACT_LOG4CXX_OBJECT(NamedPatternConverter)
BEGIN_LOG4CXX_CAST_MAP()
LOG4CXX_CAST_ENTRY(NamedPatternConverter)
END_LOG4CXX_CAST_MAP()
NamedPatternConverter();
NamedPatternConverter(const FormattingInfo& fi, const
std::vector<LogString>& options);
virtual void setOptions(const std::vector<LogString>& options);
protected:
/**
* PatternConverter's virtual method.
*
*/
virtual void convert(LogString& sbuf,
const log4cxx::spi::LoggingEventPtr& event,
log4cxx::helpers::Pool& pool) const;
virtual LogString getFullyQualifiedName(const
log4cxx::spi::LoggingEventPtr& event) const = 0;
};
}
}
#endif
1.25 +2 -1 logging-log4cxx/src/Makefile.am
Index: Makefile.am
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/Makefile.am,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- Makefile.am 2 Jan 2005 05:40:04 -0000 1.24
+++ Makefile.am 21 Feb 2005 22:46:48 -0000 1.25
@@ -43,7 +43,8 @@
logmanager.cpp \
mdc.cpp \
msxml.cpp \
- mutex.cpp \
+ mutex.cpp \
+ namedpatternconverter.cpp \
ndc.cpp \
nteventlogappender.cpp \
objectimpl.cpp \
1.12 +2 -1 logging-log4cxx/src/cacheddateformat.cpp
Index: cacheddateformat.cpp
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/cacheddateformat.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- cacheddateformat.cpp 19 Feb 2005 01:59:37 -0000 1.11
+++ cacheddateformat.cpp 21 Feb 2005 22:46:48 -0000 1.12
@@ -51,7 +51,8 @@
* Expected representation of 0 milliseconds.
*/
const logchar* const CachedDateFormat::zeroString = LOG4CXX_STR("000");
-
+
+#undef min
/**
* Creates a new CachedDateFormat object.
1.14 +8 -0 logging-log4cxx/src/patternconverter.cpp
Index: patternconverter.cpp
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/patternconverter.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- patternconverter.cpp 26 Dec 2004 07:31:53 -0000 1.13
+++ patternconverter.cpp 21 Feb 2005 22:46:48 -0000 1.14
@@ -33,6 +33,14 @@
{
}
+void PatternConverter::setFormattingInfo(const FormattingInfo& fi) {
+ minChar = fi.minChar;
+ maxChar = fi.maxChar;
+ leftAlign = fi.leftAlign;
+}
+
+void PatternConverter::setOptions(const std::vector<LogString>& options) {
+}
/**
A template method for formatting in a converter specific way.
1.31 +120 -180 logging-log4cxx/src/patternparser.cpp
Index: patternparser.cpp
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/patternparser.cpp,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- patternparser.cpp 19 Feb 2005 01:59:37 -0000 1.30
+++ patternparser.cpp 21 Feb 2005 22:46:48 -0000 1.31
@@ -36,81 +36,55 @@
using namespace log4cxx::spi;
using namespace log4cxx::pattern;
-#define ESCAPE_CHAR LOG4CXX_STR('%')
+#define ESCAPE_CHAR LOG4CXX_STR('%')
+
+#define ADD_PATTERN(specifier, classname) \
+globalRulesRegistry.insert(InternalPatternConverterMap::value_type(LOG4CXX_STR(specifier),
classname::newInstance))
-const PatternParser::PatternConverterMap&
PatternParser::getGlobalRulesRegistry() {
- static PatternConverterMap globalRulesRegistry;
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("c"),
- LoggerPatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("logger"),
- LoggerPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("C"),
- ClassNamePatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("class"),
- ClassNamePatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("d"),
- DatePatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("date"),
- DatePatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("F"),
- FileLocationPatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("file"),
- FileLocationPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("l"),
- FullLocationPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("L"),
- LineLocationPatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("line"),
- LineLocationPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("m"),
- MessagePatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("message"),
- MessagePatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("n"),
- LineSeparatorPatternConverter::newInstance));
-
- globalRulesRegistry.insert(
- PatternConverterMap::value_type(LOG4CXX_STR("M"),
- MethodLocationPatternConverter::newInstance));
- globalRulesRegistry.insert(
- PatternConverterMap::value_type(LOG4CXX_STR("method"),
- MethodLocationPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("p"),
- LevelPatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("level"),
- LevelPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("r"),
- RelativeTimePatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("relative"),
- RelativeTimePatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("t"),
- ThreadPatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("thread"),
- ThreadPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("x"),
- NDCPatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("ndc"),
- NDCPatternConverter::newInstance));
-
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("X"),
- PropertiesPatternConverter::newInstance));
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("properties"),
- PropertiesPatternConverter::newInstance));
+const PatternParser::InternalPatternConverterMap&
PatternParser::getGlobalRulesRegistry() {
+ static InternalPatternConverterMap globalRulesRegistry;
+ ADD_PATTERN("c", LoggerPatternConverter);
+ ADD_PATTERN("logger", LoggerPatternConverter);
+ ADD_PATTERN("C", ClassNamePatternConverter);
+ ADD_PATTERN("class", ClassNamePatternConverter);
-
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("throwable"),
- ThrowableInformationPatternConverter::newInstance));
+ ADD_PATTERN("d", DatePatternConverter);
+ ADD_PATTERN("date", DatePatternConverter);
+
+ ADD_PATTERN("F", FileLocationPatternConverter);
+ ADD_PATTERN("file", FileLocationPatternConverter);
+
+ ADD_PATTERN("l", FullLocationPatternConverter);
+
+ ADD_PATTERN("L", LineLocationPatternConverter);
+ ADD_PATTERN("line", LineLocationPatternConverter);
+
+ ADD_PATTERN("m", MessagePatternConverter);
+ ADD_PATTERN("message", MessagePatternConverter);
+
+ ADD_PATTERN("n", LineSeparatorPatternConverter);
+
+ ADD_PATTERN("M", MethodLocationPatternConverter);
+ ADD_PATTERN("method", MethodLocationPatternConverter);
+
+ ADD_PATTERN("p", LevelPatternConverter);
+ ADD_PATTERN("level", LevelPatternConverter);
+
+ ADD_PATTERN("r", RelativeTimePatternConverter);
+ ADD_PATTERN("relative", RelativeTimePatternConverter);
+
+ ADD_PATTERN("t", ThreadPatternConverter);
+ ADD_PATTERN("thread", ThreadPatternConverter);
+
+ ADD_PATTERN("x", NDCPatternConverter);
+ ADD_PATTERN("ndc", NDCPatternConverter);
+
+ ADD_PATTERN("X", PropertiesPatternConverter);
+ ADD_PATTERN("properties", PropertiesPatternConverter);
+
+
+ ADD_PATTERN("throwable", ThrowableInformationPatternConverter);
return globalRulesRegistry;
}
@@ -348,17 +322,23 @@
return head;
}
-PatternParser::PatternConverterFactory PatternParser::findConverterClass(
- const LogString& converterId) {
+PatternConverterPtr PatternParser::createConverter(
+ const LogString&
converterId,
+ const FormattingInfo&
formattingInfo,
+ const
std::vector<LogString>& options) const {
PatternConverterMap::const_iterator r =
converterRegistry.find(converterId);
- if(r != converterRegistry.end()) {
- return r->second;
+ if(r != converterRegistry.end()) {
+ const Class& converterClass = Class::forName(r->second);
+ PatternConverterPtr converter = converterClass.newInstance();
+ converter->setFormattingInfo(formattingInfo);
+ converter->setOptions(options);
+ return converter;
}
- r = getGlobalRulesRegistry().find(converterId);
- if(r != getGlobalRulesRegistry().end()) {
- return r->second;
+ InternalPatternConverterMap::const_iterator r2 =
getGlobalRulesRegistry().find(converterId);
+ if(r2 != getGlobalRulesRegistry().end()) {
+ return (*r2->second)(formattingInfo, options);
}
return NULL;
@@ -370,33 +350,32 @@
* and i points to the character following 'c'.
*/
void PatternParser::finalizeConverter(logchar c) {
- PatternConverterPtr pc;
-
LogString converterId(extractConverter(c));
- PatternConverterFactory factory = findConverterClass(converterId);
-
- std::vector<LogString> options(extractOptions());
-
-
- //System.out.println("Option is [" + option + "]");
- if (factory != NULL) {
- pc = (*factory)(formattingInfo, options);
- currentLiteral.erase(currentLiteral.begin(), currentLiteral.end());
- } else {
- std::basic_ostringstream<logchar> os;
- if (converterId.empty()) {
- os << LOG4CXX_STR("Empty conversion specifier starting at position
");
- } else {
- os << LOG4CXX_STR("Unrecognized conversion specifier [")
- << converterId
- << LOG4CXX_STR("] starting at position ");
- }
- os << i << LOG4CXX_STR(" in conversion pattern.");
- logError(os.str());
- pc = new LiteralPatternConverter(currentLiteral);
- currentLiteral.erase(currentLiteral.begin(), currentLiteral.end());
- }
+ std::vector<LogString> options(extractOptions());
+ PatternConverterPtr pc;
+ try {
+ pc = createConverter(converterId, formattingInfo, options);
+ if (pc == NULL) {
+ std::basic_ostringstream<logchar> os;
+ if (converterId.empty()) {
+ os << LOG4CXX_STR("Empty conversion specifier starting at
position ");
+ } else {
+ os << LOG4CXX_STR("Unrecognized conversion specifier [")
+ << converterId
+ << LOG4CXX_STR("] starting at position ");
+ }
+ os << i << LOG4CXX_STR(" in conversion pattern.");
+ logError(os.str());
+ pc = new LiteralPatternConverter(currentLiteral);
+ }
+ } catch(ClassNotFoundException& ex) {
+ LogString msg;
+ Transcoder::decode(ex.what(), msg);
+ logError(msg);
+ pc = new LiteralPatternConverter(currentLiteral);
+ }
+ currentLiteral.erase(currentLiteral.begin(), currentLiteral.end());
addConverter(pc);
}
@@ -422,20 +401,6 @@
}
-int PatternParser::getPrecision(
- const std::vector<LogString>& options) {
- int r = 0;
- if (options.size() > 0 && !options[0].empty()) {
- r = StringHelper::toInt(options[0]);
- if (r < 0) {
- LogString msg(LOG4CXX_STR("Precision options ("));
- msg.append(options[0]);
- msg.append(LOG4CXX_STR(") isn't a positive integer."));
- PatternParser::logError(msg);
- }
- }
- return r;
-}
// ---------------------------------------------------------------------
@@ -608,80 +573,55 @@
{
const LocationInfo& locInfo = event->getLocationInformation();
Transcoder::decode(locInfo.getFileName(), sbuf);
-}
-
-PatternParser::MethodLocationPatternConverter::MethodLocationPatternConverter(
- const FormattingInfo& formattingInfo,
- const std::vector<LogString>& opions)
-: PatternConverter(formattingInfo)
-{
-}
+}
+
+PatternParser::MethodLocationPatternConverter::MethodLocationPatternConverter(
+ const FormattingInfo& formattingInfo,
+ const std::vector<LogString>& opions)
+: PatternConverter(formattingInfo)
+{
+}
+
+void PatternParser::MethodLocationPatternConverter::convert(LogString& sbuf,
+ const spi::LoggingEventPtr& event, Pool& pool) const
+{
+ const LocationInfo& locInfo = event->getLocationInformation();
+ Transcoder::decode(locInfo.getMethodName(), sbuf);
+}
+
+
+
+PatternParser::ClassNamePatternConverter::ClassNamePatternConverter(const
FormattingInfo&
+ formattingInfo, const std::vector<LogString>& options)
+: NamedPatternConverter(formattingInfo, options)
+{
+}
+
+LogString PatternParser::ClassNamePatternConverter::getFullyQualifiedName(
+ const spi::LoggingEventPtr& event) const
+{
+ LogString sbuf;
+ const LocationInfo& locInfo = event->getLocationInformation();
+ Transcoder::decode(locInfo.getClassName(), sbuf);
+ return sbuf;
+}
-void PatternParser::MethodLocationPatternConverter::convert(LogString& sbuf,
- const spi::LoggingEventPtr& event, Pool& pool) const
-{
- const LocationInfo& locInfo = event->getLocationInformation();
- Transcoder::decode(locInfo.getMethodName(), sbuf);
-}
-
-PatternParser::ClassNamePatternConverter::ClassNamePatternConverter(
- const FormattingInfo& formattingInfo,
- const std::vector<LogString>& opions)
-: PatternConverter(formattingInfo)
-{
-}
-
-void PatternParser::ClassNamePatternConverter::convert(LogString& sbuf,
- const spi::LoggingEventPtr& event, Pool& pool) const
-{
- const LocationInfo& locInfo = event->getLocationInformation();
- Transcoder::decode(locInfo.getClassName(), sbuf);
-}
PatternParser::LoggerPatternConverter::LoggerPatternConverter(const
FormattingInfo&
formattingInfo, const std::vector<LogString>& options)
-: PatternConverter(formattingInfo),
precision(PatternParser::getPrecision(options))
+: NamedPatternConverter(formattingInfo, options)
{
}
-
-
-
-void PatternParser::LoggerPatternConverter::convert(LogString& sbuf,
- const spi::LoggingEventPtr& event,
- Pool& pool) const
-{
-
- if(precision <= 0)
- {
- sbuf.append(event->getLoggerName());
- }
- else
- {
- const LogString& n = event->getLoggerName();
- LogString::size_type len = n.length();
-
- // We substract 1 from 'len' when assigning to 'end' to
avoid out of
- // bounds exception in return r.substring(end+1, len). This
can happen if
- // precision is 1 and the category name ends with a dot.
- LogString::size_type end = len -1 ;
- for(int i = precision; i > 0; i--)
- {
- end = n.rfind(LOG4CXX_STR('.'), end-1);
- if(end == LogString::npos)
- {
- sbuf.append(n);
- return;
- }
- }
- sbuf.append(n, end+1, len - (end+1));
- }
+LogString PatternParser::LoggerPatternConverter::getFullyQualifiedName(
+ const spi::LoggingEventPtr& event) const
+{
+ return event->getLoggerName();
}
-
PatternParser::MessagePatternConverter::MessagePatternConverter(
const FormattingInfo& formattingInfo,
const std::vector<LogString>& opions)
1.12 +2 -3 logging-log4cxx/src/simpledateformat.cpp
Index: simpledateformat.cpp
===================================================================
RCS file: /home/cvs/logging-log4cxx/src/simpledateformat.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- simpledateformat.cpp 15 Feb 2005 23:56:01 -0000 1.11
+++ simpledateformat.cpp 21 Feb 2005 22:46:48 -0000 1.12
@@ -91,9 +91,8 @@
size_t initialLength = s.length();
StringHelper::toString(getField(tm), p, s);
size_t finalLength = s.length();
- size_t padding = width - (finalLength - initialLength);
- if (padding > 0) {
- s.insert(initialLength, padding, L'0');
+ if (initialLength + width > finalLength) {
+ s.insert(initialLength, (initialLength + width) - finalLength,
L'0');
}
}
1.1 logging-log4cxx/src/namedpatternconverter.cpp
Index: namedpatternconverter.cpp
===================================================================
/*
* Copyright 2003-2005 The Apache Software Foundation.
*
* Licensed 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/helpers/namedpatternconverter.h>
#include <log4cxx/helpers/loglog.h>
#include <log4cxx/helpers/stringhelper.h>
using namespace log4cxx;
using namespace log4cxx::helpers;
using namespace log4cxx::spi;
IMPLEMENT_LOG4CXX_OBJECT(NamedPatternConverter)
NamedPatternConverter::NamedPatternConverter(const FormattingInfo& fi,
const std::vector<LogString>&
options) :
PatternConverter(fi), precision(0) {
setOptions(options);
}
void NamedPatternConverter::setOptions(const std::vector<LogString>& options)
{
if (options.size() > 0) {
precision = StringHelper::toInt(options[0]);
if (precision < 0) {
LogString msg(LOG4CXX_STR("Precision options ("));
msg += options[0];
msg += LOG4CXX_STR(") isn't a positive integer.");
LogLog::error(msg);
precision = 0;
}
}
}
void NamedPatternConverter::convert(LogString& sbuf,
const log4cxx::spi::LoggingEventPtr& event,
log4cxx::helpers::Pool& pool) const {
LogString n(getFullyQualifiedName(event));
if (precision <= 0) {
sbuf.append(n);
} else {
LogString::size_type len = n.length();
// We substract 1 from 'len' when assigning to 'end' to avoid out of
// bounds exception in return r.substring(end+1, len). This can
happen if
// precision is 1 and the category name ends with a dot.
LogString::size_type end = len -1 ;
for(int i = precision; i > 0; i--)
{
end = n.rfind(LOG4CXX_STR('.'), end-1);
if(end == LogString::npos)
{
sbuf.append(n);
return;
}
}
sbuf.append(n, end+1, len - (end+1));
}
}
1.5 +4 -1
logging-log4cxx/tests/src/pattern/num343patternconverter.cpp
Index: num343patternconverter.cpp
===================================================================
RCS file:
/home/cvs/logging-log4cxx/tests/src/pattern/num343patternconverter.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- num343patternconverter.cpp 18 Feb 2005 17:18:54 -0000 1.4
+++ num343patternconverter.cpp 21 Feb 2005 22:46:48 -0000 1.5
@@ -18,7 +18,10 @@
using namespace log4cxx;
using namespace log4cxx::helpers;
-using namespace log4cxx::pattern;
+using namespace log4cxx::pattern;
+
+IMPLEMENT_LOG4CXX_OBJECT(Num343PatternConverter)
+
Num343PatternConverter::Num343PatternConverter() {
}
1.7 +3 -1
logging-log4cxx/tests/src/pattern/num343patternconverter.h
Index: num343patternconverter.h
===================================================================
RCS file:
/home/cvs/logging-log4cxx/tests/src/pattern/num343patternconverter.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- num343patternconverter.h 18 Feb 2005 17:18:54 -0000 1.6
+++ num343patternconverter.h 21 Feb 2005 22:46:48 -0000 1.7
@@ -22,7 +22,9 @@
namespace pattern {
class Num343PatternConverter : public log4cxx::helpers::PatternConverter
{
- public:
+ public:
+ DECLARE_LOG4CXX_OBJECT(Num343PatternConverter)
+
Num343PatternConverter();
static log4cxx::helpers::PatternConverter* newInstance(
const log4cxx::helpers::FormattingInfo& info,
1.9 +2 -2
logging-log4cxx/tests/src/pattern/patternparsertestcase.cpp
Index: patternparsertestcase.cpp
===================================================================
RCS file:
/home/cvs/logging-log4cxx/tests/src/pattern/patternparsertestcase.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- patternparsertestcase.cpp 18 Feb 2005 17:18:54 -0000 1.8
+++ patternparsertestcase.cpp 21 Feb 2005 22:46:48 -0000 1.9
@@ -85,7 +85,7 @@
LogString name(LOG4CXX_STR("z343"));
ruleRegistry.insert(
PatternParser::PatternConverterMap::value_type(name,
- Num343PatternConverter::newInstance));
+ LOG4CXX_STR("org.apache.log4j.pattern.Num343PatternConverter")));
patternParser.setConverterRegistry(ruleRegistry);
@@ -108,7 +108,7 @@
LogString name(LOG4CXX_STR("n343"));
ruleRegistry.insert(
PatternParser::PatternConverterMap::value_type(name,
- Num343PatternConverter::newInstance));
+ LOG4CXX_STR("org.apache.log4j.pattern.Num343PatternConverter")));
patternParser.setConverterRegistry(ruleRegistry);