Commit c9d69c54 authored by Jelte Jansen's avatar Jelte Jansen
Browse files

[trac555] added conversionfunctions from str to the different enums

parent fd99c692
......@@ -16,7 +16,7 @@ liblog_la_SOURCES += logger_level.h
liblog_la_SOURCES += logger_level_impl.cc logger_level_impl.h
liblog_la_SOURCES += logger_manager.cc logger_manager.h
liblog_la_SOURCES += logger_manager_impl.cc logger_manager_impl.h
liblog_la_SOURCES += logger_specification.h
liblog_la_SOURCES += logger_specification.cc logger_specification.h
liblog_la_SOURCES += logger_support.cc logger_support.h
liblog_la_SOURCES += macros.h
liblog_la_SOURCES += messagedef.cc messagedef.h
......@@ -25,7 +25,7 @@ liblog_la_SOURCES += message_exception.h
liblog_la_SOURCES += message_initializer.cc message_initializer.h
liblog_la_SOURCES += message_reader.cc message_reader.h
liblog_la_SOURCES += message_types.h
liblog_la_SOURCES += output_option.h
liblog_la_SOURCES += output_option.cc output_option.h
liblog_la_SOURCES += root_logger_name.cc root_logger_name.h
EXTRA_DIST = README
......
// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE
#include <log/logger_specification.h>
#include <log/macros.h>
#include <log/messagedef.h>
#include <boost/algorithm/string.hpp>
namespace isc {
namespace log {
isc::log::Severity
getSeverity(const std::string& sev_str) {
if (boost::iequals(sev_str, "DEBUG")) {
return isc::log::DEBUG;
} else if (boost::iequals(sev_str, "INFO")) {
return isc::log::INFO;
} else if (boost::iequals(sev_str, "WARN")) {
return isc::log::WARN;
} else if (boost::iequals(sev_str, "ERROR")) {
return isc::log::ERROR;
} else if (boost::iequals(sev_str, "FATAL")) {
return isc::log::FATAL;
} else {
Logger logger("log");
LOG_ERROR(logger, MSG_BADSEVERITY).arg(sev_str);
return isc::log::INFO;
}
}
} // namespace log
} // namespace isc
......@@ -150,6 +150,18 @@ private:
std::vector<OutputOption> options_; ///< Logger options
};
/// \brief Returns the isc::log::Severity value represented by the
/// given string
///
/// If the string is not recognized, returns isc::log::DEBUG.
/// This must be one of the strings "DEBUG", "INFO", "WARN", "ERROR",
/// "FATAL". (Must be upper case and must not contain leading or
/// trailing spaces.)
///
/// \param sev_str The string representing severity value
/// \return The severity
isc::log::Severity getSeverity(const std::string& sev_str);
} // namespace log
} // namespace isc
......
......@@ -65,24 +65,10 @@ void initLogger() {
// B10_LOGGER_SEVERITY, and can be one of "DEBUG", "INFO", "WARN", "ERROR"
// of "FATAL". Note that the string must be in upper case with no leading
// of trailing blanks.
isc::log::Severity severity = isc::log::DEBUG;
isc::log::Severity severity = isc::log::INFO;
const char* sev_char = getenv("B10_LOGGER_SEVERITY");
if (sev_char) {
string sev_string(sev_char);
if (sev_string == "DEBUG") {
severity = isc::log::DEBUG;
} else if (sev_string == "INFO") {
severity = isc::log::INFO;
} else if (sev_string == "WARN") {
severity = isc::log::WARN;
} else if (sev_string == "ERROR") {
severity = isc::log::ERROR;
} else if (sev_string == "FATAL") {
severity = isc::log::FATAL;
} else {
std::cerr << "**ERROR** unrecognised logger severity of '"
<< sev_string << "' - default severity will be used\n";
}
severity = isc::log::getSeverity(sev_char);
}
// If the severity is debug, get the debug level (environment variable
......
// File created from messagedef.mes on Mon May 9 13:52:54 2011
// File created from messagedef.mes on Fri May 27 12:15:25 2011
#include <cstddef>
#include <log/message_types.h>
......@@ -7,6 +7,9 @@
namespace isc {
namespace log {
extern const isc::log::MessageID MSG_BADDESTINATION = "MSG_BADDESTINATION";
extern const isc::log::MessageID MSG_BADSEVERITY = "MSG_BADSEVERITY";
extern const isc::log::MessageID MSG_BADSTREAM = "MSG_BADSTREAM";
extern const isc::log::MessageID MSG_DUPLNS = "MSG_DUPLNS";
extern const isc::log::MessageID MSG_DUPMSGID = "MSG_DUPMSGID";
extern const isc::log::MessageID MSG_IDNOTFND = "MSG_IDNOTFND";
......@@ -31,6 +34,9 @@ extern const isc::log::MessageID MSG_WRITERR = "MSG_WRITERR";
namespace {
const char* values[] = {
"MSG_BADDESTINATION", "Unrecognized log destination: %1",
"MSG_BADSEVERITY", "Unrecognized log severity: %1",
"MSG_BADSTREAM", "Bad log console output stream: %1",
"MSG_DUPLNS", "line %1: duplicate $NAMESPACE directive found",
"MSG_DUPMSGID", "duplicate message ID (%1) in compiled code",
"MSG_IDNOTFND", "could not replace message text for '%1': no such message",
......
// File created from messagedef.mes on Mon May 9 13:52:54 2011
// File created from messagedef.mes on Fri May 27 12:15:25 2011
#ifndef __MESSAGEDEF_H
#define __MESSAGEDEF_H
......@@ -8,6 +8,9 @@
namespace isc {
namespace log {
extern const isc::log::MessageID MSG_BADDESTINATION;
extern const isc::log::MessageID MSG_BADSEVERITY;
extern const isc::log::MessageID MSG_BADSTREAM;
extern const isc::log::MessageID MSG_DUPLNS;
extern const isc::log::MessageID MSG_DUPMSGID;
extern const isc::log::MessageID MSG_IDNOTFND;
......
......@@ -117,3 +117,15 @@ the named output file.
% UNRECDIR line %1: unrecognised directive '%2'
A line starting with a dollar symbol was found, but the first word on the line
(shown in the message) was not a recognised message compiler directive.
% BADSEVERITY Unrecognized log severity: %1
A logger severity value was given that was not recognized. The severity
should be one of "DEBUG", "INFO", "WARN", "ERROR", or "FATAL".
% BADDESTINATION Unrecognized log destination: %1
A logger destination value was given that was not recognized. The
destination should be one of "console", "file", or "syslog".
% BADSTREAM Bad log console output stream: %1
A log console output stream was given that was not recognized. The
output stream should be one of "stdout", or "stderr"
// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
#include <string>
#include <log/output_option.h>
#include <log/macros.h>
#include <log/messagedef.h>
#include <boost/algorithm/string.hpp>
namespace isc {
namespace log {
OutputOption::Destination
getDestination(const std::string& dest_str) {
if (boost::iequals(dest_str, "console")) {
return OutputOption::DEST_CONSOLE;
} else if (boost::iequals(dest_str, "file")) {
return OutputOption::DEST_FILE;
} else if (boost::iequals(dest_str, "syslog")) {
return OutputOption::DEST_SYSLOG;
} else {
Logger logger("log");
LOG_ERROR(logger, MSG_BADDESTINATION).arg(dest_str);
return OutputOption::DEST_CONSOLE;
}
}
OutputOption::Stream
getStream(const std::string& stream_str) {
if (boost::iequals(stream_str, "stderr")) {
return OutputOption::STR_STDERR;
} else if (boost::iequals(stream_str, "stdout")) {
return OutputOption::STR_STDOUT;
} else {
Logger logger("log");
LOG_ERROR(logger, MSG_BADSTREAM).arg(stream_str);
return OutputOption::STR_STDOUT;
}
}
} // namespace log
} // namespace isc
......@@ -75,6 +75,10 @@ struct OutputOption {
int maxver; ///< Maximum versions (none if <= 0)
};
OutputOption::Destination getDestination(const std::string& dest_str);
OutputOption::Stream getStream(const std::string& stream_str);
} // namespace log
} // namespace isc
......
......@@ -104,3 +104,26 @@ TEST_F(LoggerSpecificationTest, AddOption) {
++i;
EXPECT_TRUE(i == spec.end());
}
TEST(LoggerSpecification, getSeverity) {
EXPECT_EQ(DEBUG, getSeverity("DEBUG"));
EXPECT_EQ(DEBUG, getSeverity("debug"));
EXPECT_EQ(DEBUG, getSeverity("DeBuG"));
EXPECT_EQ(INFO, getSeverity("INFO"));
EXPECT_EQ(INFO, getSeverity("info"));
EXPECT_EQ(INFO, getSeverity("iNfO"));
EXPECT_EQ(WARN, getSeverity("WARN"));
EXPECT_EQ(WARN, getSeverity("warn"));
EXPECT_EQ(WARN, getSeverity("wARn"));
EXPECT_EQ(ERROR, getSeverity("ERROR"));
EXPECT_EQ(ERROR, getSeverity("error"));
EXPECT_EQ(ERROR, getSeverity("ERRoR"));
EXPECT_EQ(FATAL, getSeverity("FATAL"));
EXPECT_EQ(FATAL, getSeverity("fatal"));
EXPECT_EQ(FATAL, getSeverity("FAtaL"));
// bad values should default to stdout
EXPECT_EQ(INFO, getSeverity("some bad value"));
EXPECT_EQ(INFO, getSeverity(""));
}
......@@ -45,3 +45,32 @@ TEST_F(OutputOptionTest, Initialization) {
EXPECT_EQ(0, option.maxsize);
EXPECT_EQ(0, option.maxver);
}
TEST(OutputOption, getDestination) {
EXPECT_EQ(OutputOption::DEST_CONSOLE, getDestination("console"));
EXPECT_EQ(OutputOption::DEST_CONSOLE, getDestination("CONSOLE"));
EXPECT_EQ(OutputOption::DEST_CONSOLE, getDestination("CoNSoLE"));
EXPECT_EQ(OutputOption::DEST_FILE, getDestination("file"));
EXPECT_EQ(OutputOption::DEST_FILE, getDestination("FILE"));
EXPECT_EQ(OutputOption::DEST_FILE, getDestination("fIlE"));
EXPECT_EQ(OutputOption::DEST_SYSLOG, getDestination("syslog"));
EXPECT_EQ(OutputOption::DEST_SYSLOG, getDestination("SYSLOG"));
EXPECT_EQ(OutputOption::DEST_SYSLOG, getDestination("SYSlog"));
// bad values should default to DEST_CONSOLE
EXPECT_EQ(OutputOption::DEST_CONSOLE, getDestination("SOME_BAD_VALUE"));
}
TEST(OutputOption, getStream) {
EXPECT_EQ(OutputOption::STR_STDOUT, getStream("stdout"));
EXPECT_EQ(OutputOption::STR_STDOUT, getStream("STDOUT"));
EXPECT_EQ(OutputOption::STR_STDOUT, getStream("STdouT"));
EXPECT_EQ(OutputOption::STR_STDERR, getStream("stderr"));
EXPECT_EQ(OutputOption::STR_STDERR, getStream("STDERR"));
EXPECT_EQ(OutputOption::STR_STDERR, getStream("StDeRR"));
// bad values should default to stdout
EXPECT_EQ(OutputOption::STR_STDOUT, getStream("some bad value"));
EXPECT_EQ(OutputOption::STR_STDOUT, getStream(""));
}
......@@ -14,8 +14,12 @@
#include <gtest/gtest.h>
#include <log/logger_support.h>
int
main(int argc, char* argv[]) {
::testing::InitGoogleTest(&argc, argv);
isc::log::initLogger();
return (RUN_ALL_TESTS());
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment