PatternFormatter priorityNames fix

This commit is contained in:
Maksim Kita
2020-06-02 21:47:07 +03:00
parent bc9f15e9e9
commit bb5467afcb
3 changed files with 19 additions and 35 deletions

View File

@@ -144,6 +144,8 @@ private:
void parsePriorityNames(); void parsePriorityNames();
static const std::string DEFAULT_PRIORITY_NAMES;
std::vector<PatternAction> _patternActions; std::vector<PatternAction> _patternActions;
bool _localTime; bool _localTime;
std::string _pattern; std::string _pattern;

View File

@@ -31,10 +31,11 @@ namespace Poco {
const std::string PatternFormatter::PROP_PATTERN = "pattern"; const std::string PatternFormatter::PROP_PATTERN = "pattern";
const std::string PatternFormatter::PROP_TIMES = "times"; const std::string PatternFormatter::PROP_TIMES = "times";
const std::string PatternFormatter::PROP_PRIORITY_NAMES = "priorityNames"; const std::string PatternFormatter::PROP_PRIORITY_NAMES = "priorityNames";
const std::string PatternFormatter::DEFAULT_PRIORITY_NAMES = "Fatal,Critical,Error,Warning,Notice,Information,Debug,Trace";
PatternFormatter::PatternFormatter(): PatternFormatter::PatternFormatter():
_localTime(false) _localTime(false),
_priorityNames(DEFAULT_PRIORITY_NAMES)
{ {
parsePriorityNames(); parsePriorityNames();
} }
@@ -42,7 +43,8 @@ PatternFormatter::PatternFormatter():
PatternFormatter::PatternFormatter(const std::string& format): PatternFormatter::PatternFormatter(const std::string& format):
_localTime(false), _localTime(false),
_pattern(format) _pattern(format),
_priorityNames(DEFAULT_PRIORITY_NAMES)
{ {
parsePriorityNames(); parsePriorityNames();
parsePattern(); parsePattern();
@@ -230,31 +232,7 @@ std::string PatternFormatter::getProperty(const std::string& name) const
return Formatter::getProperty(name); return Formatter::getProperty(name);
} }
namespace
{
static std::string priorities[] =
{
"",
"Fatal",
"Critical",
"Error",
"Warning",
"Notice",
"Information",
"Debug",
"Trace"
};
}
void PatternFormatter::parsePriorityNames() void PatternFormatter::parsePriorityNames()
{
for (int i = 0; i <= 8; i++)
{
_priorities[i] = priorities[i];
}
if (!_priorityNames.empty())
{ {
StringTokenizer st(_priorityNames, ",;", StringTokenizer::TOK_TRIM); StringTokenizer st(_priorityNames, ",;", StringTokenizer::TOK_TRIM);
if (st.count() == 8) if (st.count() == 8)
@@ -266,13 +244,11 @@ void PatternFormatter::parsePriorityNames()
} }
else throw Poco::SyntaxException("priorityNames property must specify a comma-separated list of 8 property names"); else throw Poco::SyntaxException("priorityNames property must specify a comma-separated list of 8 property names");
} }
}
const std::string& PatternFormatter::getPriorityName(int prio) const std::string& PatternFormatter::getPriorityName(int prio)
{ {
poco_assert (1 <= prio && prio <= 8); poco_assert (1 <= prio && prio <= 8);
return priorities[prio]; return _priorities[prio];
} }

View File

@@ -97,6 +97,12 @@ void PatternFormatterTest::testPatternFormatter()
fmt.setProperty("pattern", "%O"); fmt.setProperty("pattern", "%O");
fmt.format(msg, result); fmt.format(msg, result);
assertTrue (result == "PatternFormatterTest.cpp"); assertTrue (result == "PatternFormatterTest.cpp");
result.clear();
fmt.setProperty("priorityNames", "FATAL,CRITICAL,SPECIAL_ERROR_NAME,WARN,NOTICE,INFO,DEBUG,TRACE");
fmt.setProperty("pattern", "%p");
fmt.format(msg, result);
assertTrue (result == "SPECIAL_ERROR_NAME");
} }