BIND 10 trac901, updated. fcc1b5e13946c5e58e2bd0bf287f551e161f0544 [trac901] Port asiodns library to new log interface
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu May 5 15:49:22 UTC 2011
The branch, trac901 has been updated
via fcc1b5e13946c5e58e2bd0bf287f551e161f0544 (commit)
via b6d140b6169c130b06896d2b40df58752991a47d (commit)
via eab5008d28b04fdd7c0f4c93051fd3b1c1a416f7 (commit)
via 121d3e844ad6d8ed8aa21dd48c53095e2f770117 (commit)
from c3dad479414b01979693ba71c832aedd681f5044 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit fcc1b5e13946c5e58e2bd0bf287f551e161f0544
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Thu May 5 17:47:52 2011 +0200
[trac901] Port asiodns library to new log interface
commit b6d140b6169c130b06896d2b40df58752991a47d
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Thu May 5 17:22:51 2011 +0200
[trac901] Convenience macros
commit eab5008d28b04fdd7c0f4c93051fd3b1c1a416f7
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Thu May 5 17:10:19 2011 +0200
[trac901] Switch to new logging interface
commit 121d3e844ad6d8ed8aa21dd48c53095e2f770117
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Thu May 5 12:31:12 2011 +0200
[trac901] The impl can output and lookup message
-----------------------------------------------------------------------
Summary of changes:
src/lib/asiodns/Makefile.am | 9 +++-
src/lib/asiodns/asiodef.cc | 39 ------------
src/lib/asiodns/asiodef.h | 23 -------
src/lib/asiodns/asiodef.msg | 16 +++---
src/lib/asiodns/io_fetch.cc | 40 ++++++-------
src/lib/log/Makefile.am | 1 +
src/lib/log/log_formatter.h | 11 +++-
src/lib/log/logger.cc | 63 +++++++++++---------
src/lib/log/logger.h | 19 +++---
src/lib/log/logger_impl.cc | 20 ++++++
src/lib/log/logger_impl.h | 2 +
src/lib/log/logger_support.cc | 10 ++--
.../{util/unittests/newhook.cc => log/macros.h} | 56 ++++++++----------
src/lib/log/messagedef.cc | 24 ++++----
src/lib/log/messagedef.h | 2 +-
src/lib/log/messagedef.mes | 22 ++++----
src/lib/log/tests/logger_support_test.cc | 17 +++---
src/lib/log/tests/run_time_init_test.sh.in | 4 +-
18 files changed, 173 insertions(+), 205 deletions(-)
delete mode 100644 src/lib/asiodns/asiodef.cc
delete mode 100644 src/lib/asiodns/asiodef.h
copy src/lib/{util/unittests/newhook.cc => log/macros.h} (53%)
-----------------------------------------------------------------------
diff --git a/src/lib/asiodns/Makefile.am b/src/lib/asiodns/Makefile.am
index 4bcdde6..e7783e6 100644
--- a/src/lib/asiodns/Makefile.am
+++ b/src/lib/asiodns/Makefile.am
@@ -10,10 +10,15 @@ AM_CXXFLAGS = $(B10_CXXFLAGS)
CLEANFILES = *.gcno *.gcda
+# Define rule to build logging source files from message file
+asiodef.h asiodef.cc: asiodef.msg
+ $(top_builddir)/src/lib/log/compiler/message $(top_srcdir)/src/lib/asiodns/asiodef.msg
+
+BUILT_SOURCES = asiodef.h asiodef.cc
+
lib_LTLIBRARIES = libasiodns.la
libasiodns_la_SOURCES = dns_answer.h
libasiodns_la_SOURCES += asiodns.h
-libasiodns_la_SOURCES += asiodef.cc asiodef.h
libasiodns_la_SOURCES += dns_lookup.h
libasiodns_la_SOURCES += dns_server.h
libasiodns_la_SOURCES += dns_service.cc dns_service.h
@@ -21,6 +26,8 @@ libasiodns_la_SOURCES += tcp_server.cc tcp_server.h
libasiodns_la_SOURCES += udp_server.cc udp_server.h
libasiodns_la_SOURCES += io_fetch.cc io_fetch.h
+nodist_libasiodns_la_SOURCES = asiodef.cc asiodef.h
+
EXTRA_DIST = asiodef.msg
# Note: the ordering matters: -Wno-... must follow -Wextra (defined in
diff --git a/src/lib/asiodns/asiodef.cc b/src/lib/asiodns/asiodef.cc
deleted file mode 100644
index 127e848..0000000
--- a/src/lib/asiodns/asiodef.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// File created from asiodef.msg on Mon Feb 28 17:15:30 2011
-
-#include <cstddef>
-#include <log/message_types.h>
-#include <log/message_initializer.h>
-
-namespace isc {
-namespace asiodns {
-
-extern const isc::log::MessageID ASIODNS_FETCHCOMP = "FETCHCOMP";
-extern const isc::log::MessageID ASIODNS_FETCHSTOP = "FETCHSTOP";
-extern const isc::log::MessageID ASIODNS_OPENSOCK = "OPENSOCK";
-extern const isc::log::MessageID ASIODNS_RECVSOCK = "RECVSOCK";
-extern const isc::log::MessageID ASIODNS_RECVTMO = "RECVTMO";
-extern const isc::log::MessageID ASIODNS_SENDSOCK = "SENDSOCK";
-extern const isc::log::MessageID ASIODNS_UNKORIGIN = "UNKORIGIN";
-extern const isc::log::MessageID ASIODNS_UNKRESULT = "UNKRESULT";
-
-} // namespace asiodns
-} // namespace isc
-
-namespace {
-
-const char* values[] = {
- "FETCHCOMP", "upstream fetch to %s(%d) has now completed",
- "FETCHSTOP", "upstream fetch to %s(%d) has been stopped",
- "OPENSOCK", "error %d opening %s socket to %s(%d)",
- "RECVSOCK", "error %d reading %s data from %s(%d)",
- "RECVTMO", "receive timeout while waiting for data from %s(%d)",
- "SENDSOCK", "error %d sending data using %s to %s(%d)",
- "UNKORIGIN", "unknown origin for ASIO error code %d (protocol: %s, address %s)",
- "UNKRESULT", "unknown result (%d) when IOFetch::stop() was executed for I/O to %s(%d)",
- NULL
-};
-
-const isc::log::MessageInitializer initializer(values);
-
-} // Anonymous namespace
-
diff --git a/src/lib/asiodns/asiodef.h b/src/lib/asiodns/asiodef.h
deleted file mode 100644
index 50aa8a9..0000000
--- a/src/lib/asiodns/asiodef.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// File created from asiodef.msg on Mon Feb 28 17:15:30 2011
-
-#ifndef __ASIODEF_H
-#define __ASIODEF_H
-
-#include <log/message_types.h>
-
-namespace isc {
-namespace asiodns {
-
-extern const isc::log::MessageID ASIODNS_FETCHCOMP;
-extern const isc::log::MessageID ASIODNS_FETCHSTOP;
-extern const isc::log::MessageID ASIODNS_OPENSOCK;
-extern const isc::log::MessageID ASIODNS_RECVSOCK;
-extern const isc::log::MessageID ASIODNS_RECVTMO;
-extern const isc::log::MessageID ASIODNS_SENDSOCK;
-extern const isc::log::MessageID ASIODNS_UNKORIGIN;
-extern const isc::log::MessageID ASIODNS_UNKRESULT;
-
-} // namespace asiodns
-} // namespace isc
-
-#endif // __ASIODEF_H
diff --git a/src/lib/asiodns/asiodef.msg b/src/lib/asiodns/asiodef.msg
index 7f86acb..ea3ec2f 100644
--- a/src/lib/asiodns/asiodef.msg
+++ b/src/lib/asiodns/asiodef.msg
@@ -15,42 +15,42 @@
$PREFIX ASIODNS_
$NAMESPACE isc::asiodns
-FETCHCOMP upstream fetch to %s(%d) has now completed
+FETCHCOMP upstream fetch to %1(%2) has now completed
+ A debug message, this records the the upstream fetch (a query made by the
+ resolver on behalf of its client) to the specified address has completed.
-FETCHSTOP upstream fetch to %s(%d) has been stopped
+FETCHSTOP upstream fetch to %1(%2) has been stopped
+ An external component has requested the halting of an upstream fetch. This
+ is an allowed operation, and the message should only appear if debug is
+ enabled.
-OPENSOCK error %d opening %s socket to %s(%d)
+OPENSOCK error %1 opening %2 socket to %3(%4)
+ The asynchronous I/O code encountered an error when trying to open a socket
+ of the specified protocol in order to send a message to the target address.
+ The the number of the system error that cause the problem is given in the
+ message.
-RECVSOCK error %d reading %s data from %s(%d)
+RECVSOCK error %1 reading %2 data from %3(%4)
+ The asynchronous I/O code encountered an error when trying read data from
+ the specified address on the given protocol. The the number of the system
+ error that cause the problem is given in the message.
-SENDSOCK error %d sending data using %s to %s(%d)
+SENDSOCK error %1 sending data using %2 to %3(%4)
+ The asynchronous I/O code encountered an error when trying send data to
+ the specified address on the given protocol. The the number of the system
+ error that cause the problem is given in the message.
-RECVTMO receive timeout while waiting for data from %s(%d)
+RECVTMO receive timeout while waiting for data from %1(%2)
+ An upstream fetch from the specified address timed out. This may happen for
+ any number of reasons and is most probably a problem at the remote server
+ or a problem on the network. The message will only appear if debug is
+ enabled.
-UNKORIGIN unknown origin for ASIO error code %d (protocol: %s, address %s)
+UNKORIGIN unknown origin for ASIO error code %1 (protocol: %2, address %3)
+ This message should not appear and indicates an internal error if it does.
+ Please enter a bug report.
-UNKRESULT unknown result (%d) when IOFetch::stop() was executed for I/O to %s(%d)
+UNKRESULT unknown result (%1) when IOFetch::stop() was executed for I/O to %2(%3)
+ The termination method of the resolver's upstream fetch class was called with
+ an unknown result code (which is given in the message). This message should
+ not appear and may indicate an internal error. Please enter a bug report.
diff --git a/src/lib/asiodns/io_fetch.cc b/src/lib/asiodns/io_fetch.cc
index 8f57d8e..dd1af75 100644
--- a/src/lib/asiodns/io_fetch.cc
+++ b/src/lib/asiodns/io_fetch.cc
@@ -40,6 +40,7 @@
#include <dns/opcode.h>
#include <dns/rcode.h>
#include <log/logger.h>
+#include <log/macros.h>
#include <asiodns/asiodef.h>
#include <asiodns/io_fetch.h>
@@ -339,34 +340,30 @@ IOFetch::stop(Result result) {
data_->stopped = true;
switch (result) {
case TIME_OUT:
- if (logger.isDebugEnabled(1)) {
- logger.debug(20, ASIODNS_RECVTMO,
- data_->remote_snd->getAddress().toText().c_str(),
- static_cast<int>(data_->remote_snd->getPort()));
- }
+ LOG_DEBUG(logger, 20, ASIODNS_RECVTMO).
+ arg(data_->remote_snd->getAddress().toText()).
+ arg(data_->remote_snd->getPort());
break;
case SUCCESS:
- if (logger.isDebugEnabled(50)) {
- logger.debug(30, ASIODNS_FETCHCOMP,
- data_->remote_rcv->getAddress().toText().c_str(),
- static_cast<int>(data_->remote_rcv->getPort()));
- }
+ LOG_DEBUG(logger, 50, ASIODNS_FETCHCOMP).
+ arg(data_->remote_rcv->getAddress().toText()).
+ arg(data_->remote_rcv->getPort());
break;
case STOPPED:
// Fetch has been stopped for some other reason. This is
// allowed but as it is unusual it is logged, but with a lower
// debug level than a timeout (which is totally normal).
- logger.debug(1, ASIODNS_FETCHSTOP,
- data_->remote_snd->getAddress().toText().c_str(),
- static_cast<int>(data_->remote_snd->getPort()));
+ LOG_DEBUG(logger, 1, ASIODNS_FETCHSTOP).
+ arg(data_->remote_snd->getAddress().toText()).
+ arg(data_->remote_snd->getPort());
break;
default:
- logger.error(ASIODNS_UNKRESULT, static_cast<int>(result),
- data_->remote_snd->getAddress().toText().c_str(),
- static_cast<int>(data_->remote_snd->getPort()));
+ LOG_ERROR(logger, ASIODNS_UNKRESULT).
+ arg(data_->remote_snd->getAddress().toText()).
+ arg(data_->remote_snd->getPort());
}
// Stop requested, cancel and I/O's on the socket and shut it down,
@@ -394,12 +391,11 @@ void IOFetch::logIOFailure(asio::error_code ec) {
(data_->origin == ASIODNS_UNKORIGIN));
static const char* PROTOCOL[2] = {"TCP", "UDP"};
- logger.error(data_->origin,
- ec.value(),
- ((data_->remote_snd->getProtocol() == IPPROTO_TCP) ?
- PROTOCOL[0] : PROTOCOL[1]),
- data_->remote_snd->getAddress().toText().c_str(),
- static_cast<int>(data_->remote_snd->getPort()));
+ LOG_ERROR(logger, data_->origin).arg(ec.value()).
+ arg((data_->remote_snd->getProtocol() == IPPROTO_TCP) ?
+ PROTOCOL[0] : PROTOCOL[1]).
+ arg(data_->remote_snd->getAddress().toText()).
+ arg(data_->remote_snd->getPort());
}
} // namespace asiodns
diff --git a/src/lib/log/Makefile.am b/src/lib/log/Makefile.am
index 53d320e..537d08f 100644
--- a/src/lib/log/Makefile.am
+++ b/src/lib/log/Makefile.am
@@ -22,6 +22,7 @@ liblog_la_SOURCES += message_reader.cc message_reader.h
liblog_la_SOURCES += message_types.h
liblog_la_SOURCES += root_logger_name.cc root_logger_name.h
liblog_la_SOURCES += log_formatter.h log_formatter.cc
+liblog_la_SOURCES += macros.h
EXTRA_DIST = README
EXTRA_DIST += messagedef.mes
diff --git a/src/lib/log/log_formatter.h b/src/lib/log/log_formatter.h
index d8a2a6d..d33a9be 100644
--- a/src/lib/log/log_formatter.h
+++ b/src/lib/log/log_formatter.h
@@ -73,9 +73,8 @@ private:
/// \brief Which will be the next placeholder to replace
const unsigned nextPlaceholder_;
/// \brief Should we do output?
- bool active_;
+ mutable bool active_;
Formatter& operator =(const Formatter& other);
- Formatter(const Formatter& other);
public:
/// \brief Constructor of "active" formatter
///
@@ -109,6 +108,14 @@ public:
active_(false)
{
}
+
+ Formatter(const Formatter& other) :
+ logger_(other.logger_), prefix_(other.prefix_),
+ message_(other.message_), nextPlaceholder_(other.nextPlaceholder_),
+ active_(other.active_)
+ {
+ other.active_ = false;
+ }
/// \brief Destructor.
//
/// This is the place where output happens if the formatter is active.
diff --git a/src/lib/log/logger.cc b/src/lib/log/logger.cc
index 99dc3a1..3131c0b 100644
--- a/src/lib/log/logger.cc
+++ b/src/lib/log/logger.cc
@@ -112,52 +112,57 @@ Logger::isFatalEnabled() {
// Output methods
void
-Logger::debug(int dbglevel, const isc::log::MessageID& ident, ...) {
+Logger::output(const char* sevText, const string& message) {
+ getLoggerPtr()->outputRaw(sevText, message);
+}
+
+Logger::Formatter
+Logger::debug(int dbglevel, const isc::log::MessageID& ident) {
if (isDebugEnabled(dbglevel)) {
- va_list ap;
- va_start(ap, ident);
- getLoggerPtr()->debug(ident, ap);
- va_end(ap);
+ return (Formatter("DEBUG", getLoggerPtr()->lookupMessage(ident), 1,
+ *this));
+ } else {
+ return (Formatter());
}
}
-void
-Logger::info(const isc::log::MessageID& ident, ...) {
+Logger::Formatter
+Logger::info(const isc::log::MessageID& ident) {
if (isInfoEnabled()) {
- va_list ap;
- va_start(ap, ident);
- getLoggerPtr()->info(ident, ap);
- va_end(ap);
+ return (Formatter("INFO ", getLoggerPtr()->lookupMessage(ident), 1,
+ *this));
+ } else {
+ return (Formatter());
}
}
-void
-Logger::warn(const isc::log::MessageID& ident, ...) {
+Logger::Formatter
+Logger::warn(const isc::log::MessageID& ident) {
if (isWarnEnabled()) {
- va_list ap;
- va_start(ap, ident);
- getLoggerPtr()->warn(ident, ap);
- va_end(ap);
+ return (Formatter("WARN ", getLoggerPtr()->lookupMessage(ident), 1,
+ *this));
+ } else {
+ return (Formatter());
}
}
-void
-Logger::error(const isc::log::MessageID& ident, ...) {
+Logger::Formatter
+Logger::error(const isc::log::MessageID& ident) {
if (isErrorEnabled()) {
- va_list ap;
- va_start(ap, ident);
- getLoggerPtr()->error(ident, ap);
- va_end(ap);
+ return (Formatter("ERROR", getLoggerPtr()->lookupMessage(ident), 1,
+ *this));
+ } else {
+ return (Formatter());
}
}
-void
-Logger::fatal(const isc::log::MessageID& ident, ...) {
+Logger::Formatter
+Logger::fatal(const isc::log::MessageID& ident) {
if (isFatalEnabled()) {
- va_list ap;
- va_start(ap, ident);
- getLoggerPtr()->fatal(ident, ap);
- va_end(ap);
+ return (Formatter("FATAL", getLoggerPtr()->lookupMessage(ident), 1,
+ *this));
+ } else {
+ return (Formatter());
}
}
diff --git a/src/lib/log/logger.h b/src/lib/log/logger.h
index 88e88e2..be54d86 100644
--- a/src/lib/log/logger.h
+++ b/src/lib/log/logger.h
@@ -21,6 +21,7 @@
#include <log/debug_levels.h>
#include <log/logger_levels.h>
#include <log/message_types.h>
+#include <log/log_formatter.h>
namespace isc {
namespace log {
@@ -48,6 +49,9 @@ class LoggerImpl; // Forward declaration of the implementation class
class Logger {
public:
+ typedef isc::log::Formatter<Logger> Formatter;
+ void output(const char* sevText, const std::string& message);
+
/// \brief Constructor
///
/// Creates/attaches to a logger of a specific name.
@@ -157,36 +161,31 @@ public:
/// \param dbglevel Debug level, ranging between 0 and 99. Higher numbers
/// are used for more verbose output.
/// \param ident Message identification.
- /// \param ... Optional arguments for the message.
- void debug(int dbglevel, const MessageID& ident, ...);
+ Formatter debug(int dbglevel, const MessageID& ident);
/// \brief Output Informational Message
///
/// \param ident Message identification.
- /// \param ... Optional arguments for the message.
- void info(const MessageID& ident, ...);
+ Formatter info(const MessageID& ident);
/// \brief Output Warning Message
///
/// \param ident Message identification.
- /// \param ... Optional arguments for the message.
- void warn(const MessageID& ident, ...);
+ Formatter warn(const MessageID& ident);
/// \brief Output Error Message
///
/// \param ident Message identification.
- /// \param ... Optional arguments for the message.
- void error(const MessageID& ident, ...);
+ Formatter error(const MessageID& ident);
/// \brief Output Fatal Message
///
/// \param ident Message identification.
- /// \param ... Optional arguments for the message.
- void fatal(const MessageID& ident, ...);
+ Formatter fatal(const MessageID& ident);
/// \brief Equality
///
diff --git a/src/lib/log/logger_impl.cc b/src/lib/log/logger_impl.cc
index 41153e9..ab0298a 100644
--- a/src/lib/log/logger_impl.cc
+++ b/src/lib/log/logger_impl.cc
@@ -194,6 +194,26 @@ LoggerImpl::isDebugEnabled(int dbglevel) {
}
// Output a general message
+string*
+LoggerImpl::lookupMessage(const MessageID& ident) {
+ return (new string(string(ident) + ", " +
+ MessageDictionary::globalDictionary().getText(ident)));
+}
+
+void
+LoggerImpl::outputRaw(const char* sevText, const string& message) {
+ // Get the time in a struct tm format, and convert to text
+ time_t t_time;
+ time(&t_time);
+ struct tm* tm_time = localtime(&t_time);
+
+ char chr_time[32];
+ (void) strftime(chr_time, sizeof(chr_time), "%Y-%m-%d %H:%M:%S", tm_time);
+
+ // Now output.
+ cout << chr_time << " " << sevText << " [" << getName() << "] " <<
+ message << endl;
+}
void
LoggerImpl::output(const char* sev_text, const MessageID& ident,
diff --git a/src/lib/log/logger_impl.h b/src/lib/log/logger_impl.h
index 9fc9cf9..cee2483 100644
--- a/src/lib/log/logger_impl.h
+++ b/src/lib/log/logger_impl.h
@@ -179,6 +179,8 @@ public:
void output(const char* sev_text, const MessageID& ident,
va_list ap);
+ void outputRaw(const char* sev_text, const std::string& message);
+ std::string* lookupMessage(const MessageID& id);
/// \brief Output Debug Message
///
diff --git a/src/lib/log/logger_support.cc b/src/lib/log/logger_support.cc
index f8bf075..83147aa 100644
--- a/src/lib/log/logger_support.cc
+++ b/src/lib/log/logger_support.cc
@@ -62,7 +62,7 @@ readLocalMessageFile(const char* file) {
MessageDictionary& dictionary = MessageDictionary::globalDictionary();
MessageReader reader(&dictionary);
try {
- logger.info(MSG_RDLOCMES, file);
+ logger.info(MSG_RDLOCMES).arg(file);
reader.readFile(file, MessageReader::REPLACE);
// File successfully read, list the duplicates
@@ -70,7 +70,7 @@ readLocalMessageFile(const char* file) {
for (MessageReader::MessageIDCollection::const_iterator
i = unknown.begin(); i != unknown.end(); ++i) {
string message_id = boost::lexical_cast<string>(*i);
- logger.warn(MSG_IDNOTFND, message_id.c_str());
+ logger.warn(MSG_IDNOTFND).arg(message_id);
}
}
catch (MessageException& e) {
@@ -82,11 +82,11 @@ readLocalMessageFile(const char* file) {
break;
case 1:
- logger.error(ident, args[0].c_str());
+ logger.error(ident).arg(args[0]);
break;
default: // 2 or more (2 should be the maximum)
- logger.error(ident, args[0].c_str(), args[1].c_str());
+ logger.error(ident).arg(args[0]).arg(args[1]);
}
}
}
@@ -117,7 +117,7 @@ initLogger(const string& root, isc::log::Severity severity, int dbglevel,
vector<string>::iterator new_end =
unique(duplicates.begin(), duplicates.end());
for (vector<string>::iterator i = duplicates.begin(); i != new_end; ++i) {
- logger.warn(MSG_DUPMSGID, i->c_str());
+ logger.warn(MSG_DUPMSGID).arg(*i);
}
}
diff --git a/src/lib/log/macros.h b/src/lib/log/macros.h
new file mode 100644
index 0000000..7b4b497
--- /dev/null
+++ b/src/lib/log/macros.h
@@ -0,0 +1,43 @@
+// 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.
+
+#ifndef __LOG_MACROS_H
+#define __LOG_MACROS_H
+
+#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE) \
+ if (!(LOGGER).isDebugEnabled((LEVEL))) { \
+ } else \
+ (LOGGER).debug((LEVEL), (MESSAGE))
+
+#define LOG_INFO(LOGGER, MESSAGE) \
+ if (!(LOGGER).isInfoEnabled()) { \
+ } else \
+ (LOGGER).info((MESSAGE))
+
+#define LOG_WARN(LOGGER, MESSAGE) \
+ if (!(LOGGER).isWarnEnabled()) { \
+ } else \
+ (LOGGER).warn((MESSAGE))
+
+#define LOG_ERROR(LOGGER, MESSAGE) \
+ if (!(LOGGER).isErrorEnabled()) { \
+ } else \
+ (LOGGER).error((MESSAGE))
+
+#define LOG_FATAL(LOGGER, MESSAGE) \
+ if (!(LOGGER).isFatalEnabled()) { \
+ } else \
+ (LOGGER).fatal((MESSAGE))
+
+#endif
diff --git a/src/lib/log/messagedef.cc b/src/lib/log/messagedef.cc
index f680a74..46086d0 100644
--- a/src/lib/log/messagedef.cc
+++ b/src/lib/log/messagedef.cc
@@ -1,4 +1,4 @@
-// File created from messagedef.mes on Mon Feb 14 11:07:45 2011
+// File created from messagedef.mes on Thu May 5 16:57:11 2011
#include <cstddef>
#include <log/message_types.h>
@@ -33,21 +33,21 @@ namespace {
const char* values[] = {
"DUPLNS", "duplicate $NAMESPACE directive found",
"DUPLPRFX", "duplicate $PREFIX directive found",
- "DUPMSGID", "duplicate message ID (%s) in compiled code",
- "IDNOTFND", "could not replace message for '%s': no such message identification",
- "MSGRDERR", "error reading from message file %s: %s",
- "MSGWRTERR", "error writing to %s: %s",
- "NOMSGTXT", "a line containing a message ID ('%s') and nothing else was found",
+ "DUPMSGID", "duplicate message ID (%1) in compiled code",
+ "IDNOTFND", "could not replace message for '%1': no such message identification",
+ "MSGRDERR", "error reading from message file %1: %2",
+ "MSGWRTERR", "error writing to %1: %2",
+ "NOMSGTXT", "a line containing a message ID ('%1') and nothing else was found",
"NSEXTRARG", "$NAMESPACE directive has too many arguments",
- "NSINVARG", "$NAMESPACE directive has an invalid argument ('%s')",
+ "NSINVARG", "$NAMESPACE directive has an invalid argument ('%1')",
"NSNOARG", "no arguments were given to the $NAMESPACE directive",
- "OPNMSGIN", "unable to open message file %s for input: %s",
- "OPNMSGOUT", "unable to open %s for output: %s",
+ "OPNMSGIN", "unable to open message file %1 for input: %2",
+ "OPNMSGOUT", "unable to open %1 for output: %2",
"PRFEXTRARG", "$PREFIX directive has too many arguments",
- "PRFINVARG", "$PREFIX directive has an invalid argument ('%s')",
+ "PRFINVARG", "$PREFIX directive has an invalid argument ('%1')",
"PRFNOARG", "no arguments were given to the $PREFIX directive",
- "RDLOCMES", "reading local message file %s",
- "UNRECDIR", "unrecognised directive '%s'",
+ "RDLOCMES", "reading local message file %1",
+ "UNRECDIR", "unrecognised directive '%1'",
NULL
};
diff --git a/src/lib/log/messagedef.h b/src/lib/log/messagedef.h
index eb8f4ea..47867e6 100644
--- a/src/lib/log/messagedef.h
+++ b/src/lib/log/messagedef.h
@@ -1,4 +1,4 @@
-// File created from messagedef.mes on Mon Feb 14 11:07:45 2011
+// File created from messagedef.mes on Thu May 5 16:57:11 2011
#ifndef __MESSAGEDEF_H
#define __MESSAGEDEF_H
diff --git a/src/lib/log/messagedef.mes b/src/lib/log/messagedef.mes
index 3599388..077830c 100644
--- a/src/lib/log/messagedef.mes
+++ b/src/lib/log/messagedef.mes
@@ -23,7 +23,7 @@ $NAMESPACE isc::log
# chicken-and-egg situation where we need the files to build the message
# compiler, yet we need the compiler to build the files.
-DUPMSGID duplicate message ID (%s) in compiled code
+DUPMSGID duplicate message ID (%1) in compiled code
+ Indicative of a programming error, when it started up, BIND10 detected that
+ the given message ID had been registered by one or more modules. (All message
+ IDs should be unique throughout BIND10.) This has no impact on the operation
@@ -44,7 +44,7 @@ DUPLPRFX duplicate $PREFIX directive found
+ this version of the code, such a condition is regarded as an error and the
+ read will be abandoned.
-IDNOTFND could not replace message for '%s': no such message identification
+IDNOTFND could not replace message for '%1': no such message identification
+ During start-up a local message file was read. A line with the listed
+ message identification was found in the file, but the identification is not
+ one contained in the compiled-in message dictionary. Either the message
@@ -55,10 +55,10 @@ IDNOTFND could not replace message for '%s': no such message identification
+ This message may appear a number of times in the file, once for every such
+ unknown message identification.
-MSGRDERR error reading from message file %s: %s
+MSGRDERR error reading from message file %1: %2
+ The specified error was encountered reading from the named message file.
-MSGWRTERR error writing to %s: %s
+MSGWRTERR error writing to %1: %2
+ The specified error was encountered by the message compiler when writing to
+ the named output file.
@@ -67,13 +67,13 @@ NSEXTRARG $NAMESPACE directive has too many arguments
+ generated symbol names are placed. This error is generated when the
+ compiler finds a $NAMESPACE directive with more than one argument.
-NSINVARG $NAMESPACE directive has an invalid argument ('%s')
+NSINVARG $NAMESPACE directive has an invalid argument ('%1')
+ The $NAMESPACE argument should be a valid C++ namespace. The reader does a
+ cursory check on its validity, checking that the characters in the namespace
+ are correct. The error is generated when the reader finds an invalid
+ character. (Valid are alphanumeric characters, underscores and colons.)
-NOMSGTXT a line containing a message ID ('%s') and nothing else was found
+NOMSGTXT a line containing a message ID ('%1') and nothing else was found
+ Message definitions comprise lines starting with a message identification (a
+ symbolic name for the message) and followed by the text of the message. This
+ error is generated when a line is found in the message file that contains just
@@ -84,11 +84,11 @@ NSNOARG no arguments were given to the $NAMESPACE directive
+ generated symbol names are placed. This error is generated when the
+ compiler finds a $NAMESPACE directive with no arguments.
-OPNMSGIN unable to open message file %s for input: %s
+OPNMSGIN unable to open message file %1 for input: %2
+ The program was not able to open the specified input message file for the
+ reason given.
-OPNMSGOUT unable to open %s for output: %s
+OPNMSGOUT unable to open %1 for output: %2
+ The program was not able to open the specified output file for the reason
+ given.
@@ -97,7 +97,7 @@ PRFEXTRARG $PREFIX directive has too many arguments
+ symbol names when a C++ .h file is created. This error is generated when the
+ compiler finds a $PREFIX directive with more than one argument.
-PRFINVARG $PREFIX directive has an invalid argument ('%s')
+PRFINVARG $PREFIX directive has an invalid argument ('%1')
+ The $PREFIX argument is used in a symbol name in a C++ header file. As such,
+ it must adhere to restrictions on C++ symbol names (e.g. may only contain
+ alphanumeric characters or underscores, and may nor start with a digit). A
@@ -109,11 +109,11 @@ PRFNOARG no arguments were given to the $PREFIX directive
+ symbol names when a C++ .h file is created. This error is generated when the
+ compiler finds a $PREFIX directive with no arguments.
-RDLOCMES reading local message file %s
+RDLOCMES reading local message file %1
+ This is an informational message output by BIND10 when it starts to read a
+ local message file. (A local message file may replace the text of one of more
+ messages; the ID of the message will not be changed though.)
-UNRECDIR unrecognised directive '%s'
+UNRECDIR unrecognised directive '%1'
+ 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.
diff --git a/src/lib/log/tests/logger_support_test.cc b/src/lib/log/tests/logger_support_test.cc
index 4d8863e..d0d5c53 100644
--- a/src/lib/log/tests/logger_support_test.cc
+++ b/src/lib/log/tests/logger_support_test.cc
@@ -23,6 +23,7 @@
#include <iostream>
#include <log/logger.h>
+#include <log/macros.h>
#include <log/logger_support.h>
#include <log/root_logger_name.h>
@@ -92,13 +93,13 @@ int main(int argc, char** argv) {
initLogger("alpha", severity, dbglevel, localfile);
// Log a few messages
- logger_ex.fatal(MSG_MSGWRTERR, "test1", "42");
- logger_ex.error(MSG_UNRECDIR, "false");
- logger_dlm.warn(MSG_MSGRDERR, "a.txt", "dummy test");
- logger_dlm.info(MSG_OPNMSGIN, "example.msg", "dummy test");
- logger_ex.debug(0, MSG_UNRECDIR, "[abc]");
- logger_ex.debug(24, MSG_UNRECDIR, "[24]");
- logger_ex.debug(25, MSG_UNRECDIR, "[25]");
- logger_ex.debug(26, MSG_UNRECDIR, "[26]");
+ LOG_FATAL(logger_ex, MSG_MSGWRTERR).arg("test1").arg("42");
+ LOG_ERROR(logger_ex, MSG_UNRECDIR).arg("false");
+ LOG_WARN(logger_dlm, MSG_MSGRDERR).arg("a.txt").arg("dummy test");
+ LOG_INFO(logger_dlm, MSG_OPNMSGIN).arg("example.msg").arg("dummy test");
+ LOG_DEBUG(logger_ex, 0, MSG_UNRECDIR).arg("[abc]");
+ LOG_DEBUG(logger_ex, 24, MSG_UNRECDIR).arg("[24]");
+ LOG_DEBUG(logger_ex, 25, MSG_UNRECDIR).arg("[25]");
+ LOG_DEBUG(logger_ex, 26, MSG_UNRECDIR).arg("[26]");
return (0);
}
diff --git a/src/lib/log/tests/run_time_init_test.sh.in b/src/lib/log/tests/run_time_init_test.sh.in
index e2bdf6f..1010566 100755
--- a/src/lib/log/tests/run_time_init_test.sh.in
+++ b/src/lib/log/tests/run_time_init_test.sh.in
@@ -30,8 +30,8 @@ passfail() {
cat > $localmes << .
NOTHERE this message is not in the global dictionary
-MSGRDERR replacement read error, parameters: '%s' and '%s'
-UNRECDIR replacement unrecognised directive message, parameter is '%s'
+MSGRDERR replacement read error, parameters: '%1' and '%2'
+UNRECDIR replacement unrecognised directive message, parameter is '%1'
.
echo -n "1. runInitTest default parameters: "
More information about the bind10-changes
mailing list