Kea  1.9.9-git
db_log.cc
Go to the documentation of this file.
1 // Copyright (C) 2018-2021 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
8 
9 #include <config.h>
10 
11 #include <exceptions/exceptions.h>
12 #include <database/db_log.h>
13 #include <database/db_messages.h>
14 
15 using namespace isc::log;
16 
17 namespace isc {
18 namespace db {
19 
22 
26 
32 
37 
43 };
44 
46 
47 DbLogger db_logger_translator(database_logger, db_message_map);
48 
50 
51 std::mutex db_logger_mutex;
52 
53 const MessageID&
54 DbLogger::translateMessage(const DbMessageID& id) const {
55  try {
56  return (map_.at(id));
57  } catch (const std::out_of_range&) {
58  isc_throw(isc::Unexpected, "can't map message: " << id);
59  }
60 }
61 
63  if (db_logger_stack.empty()) {
64  isc_throw(isc::Unexpected, "database logger stack is empty");
65  }
66 }
67 
68 template <>
70 DB_LOG<fatal>::formatter(DbMessageID const message_id,
71  int const /* debug_level = 0 */) {
72  return isc::db::db_logger_stack.back().logger_.fatal(
73  isc::db::db_logger_stack.back().translateMessage(message_id));
74 }
75 
76 template <>
78 DB_LOG<error>::formatter(DbMessageID const message_id,
79  int const /* debug_level = 0 */) {
80  return isc::db::db_logger_stack.back().logger_.error(
81  isc::db::db_logger_stack.back().translateMessage(message_id));
82 }
83 
84 template <>
86 DB_LOG<warn>::formatter(DbMessageID const message_id,
87  int const /* debug_level = 0 */) {
88  return isc::db::db_logger_stack.back().logger_.warn(
89  isc::db::db_logger_stack.back().translateMessage(message_id));
90 }
91 
92 template <>
94 DB_LOG<info>::formatter(DbMessageID const message_id,
95  int const /* debug_level = 0 */) {
96  return isc::db::db_logger_stack.back().logger_.info(
97  isc::db::db_logger_stack.back().translateMessage(message_id));
98 }
99 
100 template <>
102 DB_LOG<debug>::formatter(DbMessageID const message_id,
103  int const debug_level /* = 0 */) {
104  return isc::db::db_logger_stack.back().logger_.debug(
105  debug_level,
106  isc::db::db_logger_stack.back().translateMessage(message_id));
107 }
108 
109 template <>
110 bool
111 DB_LOG<fatal>::isEnabled(int const /* debug_level = 0 */) const {
112  return db_logger_stack.back().logger_.isFatalEnabled();
113 }
114 
115 template <>
116 bool
117 DB_LOG<error>::isEnabled(int const /* debug_level = 0 */) const {
118  return db_logger_stack.back().logger_.isErrorEnabled();
119 }
120 
121 template <>
122 bool
123 DB_LOG<warn>::isEnabled(int const /* debug_level = 0 */) const {
124  return db_logger_stack.back().logger_.isWarnEnabled();
125 }
126 
127 template <>
128 bool
129 DB_LOG<info>::isEnabled(int const /* debug_level = 0 */) const {
130  return db_logger_stack.back().logger_.isInfoEnabled();
131 }
132 
133 template <>
134 bool
135 DB_LOG<debug>::isEnabled(int const debug_level /* = 0 */) const {
136  return db_logger_stack.back().logger_.isDebugEnabled(debug_level);
137 }
138 
139 } // namespace db
140 } // namespace isc
We want to reuse the database backend connection and exchange code for other uses, in particular for hook libraries.
Logger Class.
Definition: log/logger.h:141
DbMessageID
Database messages.
Definition: db_log.h:51
const isc::log::MessageID DATABASE_CQL_CONNECTION_ROLLBACK
Definition: db_messages.h:13
const isc::log::MessageID DATABASE_PGSQL_COMMIT
Definition: db_messages.h:20
const isc::log::MessageID DATABASE_PGSQL_DEALLOC_ERROR
Definition: db_messages.h:21
const DbLogger::MessageMap db_message_map
Map of translated messages.
Definition: db_log.cc:24
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
std::map< DbMessageID, isc::log::MessageID > MessageMap
Translation map type.
Definition: db_log.h:77
const isc::log::MessageID DATABASE_CQL_CONNECTION_COMMIT
Definition: db_messages.h:12
std::mutex db_logger_mutex
Global mutex to protect logger stack.
Definition: db_log.cc:51
A generic exception that is thrown when an unexpected error condition occurs.
std::list< DbLogger > DbLoggerStack
Database logger stack.
Definition: db_log.h:102
DbLoggerStack db_logger_stack
Global database logger stack (initialized to database logger)
Definition: db_log.cc:49
const isc::log::MessageID DATABASE_PGSQL_FATAL_ERROR
Definition: db_messages.h:22
const isc::log::MessageID DATABASE_MYSQL_ROLLBACK
Definition: db_messages.h:18
const int DB_DBG_TRACE_DETAIL
Database logging levels.
Definition: db_log.cc:21
Defines the logger used by the top-level component of kea-dhcp-ddns.
const isc::log::MessageID DATABASE_PGSQL_ROLLBACK
Definition: db_messages.h:23
The log message formatter.
const isc::log::MessageID DATABASE_CQL_CONNECTION_BEGIN_TRANSACTION
Definition: db_messages.h:11
const isc::log::MessageID DATABASE_MYSQL_FATAL_ERROR
Definition: db_messages.h:17
const isc::log::MessageID DATABASE_MYSQL_COMMIT
Definition: db_messages.h:16
void checkDbLoggerStack()
Check database logger stack.
Definition: db_log.cc:62
DbLogger db_logger_translator(database_logger, db_message_map)
Database logger translator.
Definition: db_log.h:212
isc::log::Logger database_logger("database")
Common database library logger.
Definition: db_log.h:46
const int DBGLVL_TRACE_DETAIL
Trace detailed operations.
Definition: log_dbglevels.h:71
const isc::log::MessageID DATABASE_MYSQL_START_TRANSACTION
Definition: db_messages.h:19
const isc::log::MessageID DATABASE_PGSQL_START_TRANSACTION
Definition: db_messages.h:24
const isc::log::MessageID DATABASE_CQL_DEALLOC_ERROR
Definition: db_messages.h:14
const isc::log::MessageID DATABASE_INVALID_ACCESS
Definition: db_messages.h:15
const char * MessageID
Definition: message_types.h:15