Unify TraceLog and MdsLog class to one class (TraceLog) so it can be
used as a common log client.
Add new instance TraceLog for OpenSAF logging to local file, which can
be enabled/disabled via environment variable OSAF_LOCAL_NODE_LOG.
---
src/base/Makefile.am | 2 +
src/base/logtrace.cc | 195 ++++++++++++--------------------------------
src/base/logtrace.h | 12 ++-
src/base/logtrace_client.cc | 105 ++++++++++++++++++++++++
src/base/logtrace_client.h | 55 +++++++++++++
src/mds/mds_log.cc | 132 +++---------------------------
6 files changed, 234 insertions(+), 267 deletions(-)
create mode 100644 src/base/logtrace_client.cc
create mode 100644 src/base/logtrace_client.h
diff --git a/src/base/Makefile.am b/src/base/Makefile.am
index eacc009..aa94423 100644
--- a/src/base/Makefile.am
+++ b/src/base/Makefile.am
@@ -48,6 +48,7 @@ lib_libopensaf_core_la_SOURCES += \
src/base/hj_ubaid.c \
src/base/log_message.cc \
src/base/logtrace.cc \
+ src/base/logtrace_client.cc \
src/base/mutex.cc \
src/base/ncs_main_pub.c \
src/base/ncs_sprr.c \
@@ -94,6 +95,7 @@ noinst_HEADERS += \
src/base/hash.h \
src/base/log_message.h \
src/base/logtrace.h \
+ src/base/logtrace_client.h \
src/base/macros.h \
src/base/mutex.h \
src/base/ncs_edu.h \
diff --git a/src/base/logtrace.cc b/src/base/logtrace.cc
index b046fab..fd3d829 100644
--- a/src/base/logtrace.cc
+++ b/src/base/logtrace.cc
@@ -18,10 +18,6 @@
*/
#include "base/logtrace.h"
-#include <fcntl.h>
-#include <libgen.h>
-#include <limits.h>
-#include <pthread.h>
#include <signal.h>
#include <sys/stat.h>
#include <sys/syscall.h>
@@ -30,22 +26,9 @@
#include <syslog.h>
#include <time.h>
#include <unistd.h>
-#include <cassert>
-#include <cerrno>
-#include <cstdarg>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include "base/buffer.h"
-#include "base/conf.h"
-#include "base/log_message.h"
-#include "base/macros.h"
-#include "base/mutex.h"
+#include "base/getenv.h"
+#include "base/logtrace_client.h"
#include "base/ncsgl_defs.h"
-#include "base/osaf_utility.h"
-#include "base/time.h"
-#include "base/unix_client_socket.h"
-#include "dtm/common/osaflog_protocol.h"
namespace global {
@@ -55,107 +38,13 @@ const char *const prefix_name[] = {"EM", "AL", "CR", "ER",
"WA", "NO", "IN",
"T6", "T7", "T8", ">>", "<<"};
char *msg_id;
int logmask;
+const char* osaf_log_file = "osaf.log";
+bool enable_osaf_log = false;
} // namespace global
-class TraceLog {
- public:
- static bool Init();
- static void Log(base::LogMessage::Severity severity, const char *fmt,
- va_list ap);
-
- private:
- TraceLog(const std::string &fqdn, const std::string &app_name,
- uint32_t proc_id, const std::string &msg_id,
- const std::string &socket_name);
- void LogInternal(base::LogMessage::Severity severity, const char *fmt,
- va_list ap);
- static constexpr const uint32_t kMaxSequenceId = uint32_t{0x7fffffff};
- static TraceLog *instance_;
- const base::LogMessage::HostName fqdn_;
- const base::LogMessage::AppName app_name_;
- const base::LogMessage::ProcId proc_id_;
- const base::LogMessage::MsgId msg_id_;
- uint32_t sequence_id_;
- base::UnixClientSocket log_socket_;
- base::Buffer<512> buffer_;
- base::Mutex mutex_;
-
- DELETE_COPY_AND_MOVE_OPERATORS(TraceLog);
-};
-
-TraceLog *TraceLog::instance_ = nullptr;
-
-TraceLog::TraceLog(const std::string &fqdn, const std::string &app_name,
- uint32_t proc_id, const std::string &msg_id,
- const std::string &socket_name)
- : fqdn_{base::LogMessage::HostName{fqdn}},
- app_name_{base::LogMessage::AppName{app_name}},
- proc_id_{base::LogMessage::ProcId{std::to_string(proc_id)}},
- msg_id_{base::LogMessage::MsgId{msg_id}},
- sequence_id_{1},
- log_socket_{socket_name, base::UnixSocket::kBlocking},
- buffer_{},
- mutex_{} {}
-
-bool TraceLog::Init() {
- if (instance_ != nullptr) return false;
- char app_name[49];
- char pid_path[1024];
- uint32_t process_id = getpid();
- char *token, *saveptr;
- char *pid_name = nullptr;
-
- memset(app_name, 0, 49);
- memset(pid_path, 0, 1024);
-
- snprintf(pid_path, sizeof(pid_path), "/proc/%" PRIu32 "/cmdline",
process_id);
- FILE *f = fopen(pid_path, "r");
- if (f != nullptr) {
- size_t size;
- size = fread(pid_path, sizeof(char), 1024, f);
- if (size > 0) {
- if ('\n' == pid_path[size - 1]) pid_path[size - 1] = '\0';
- }
- fclose(f);
- } else {
- pid_path[0] = '\0';
- }
- token = strtok_r(pid_path, "/", &saveptr);
- while (token != nullptr) {
- pid_name = token;
- token = strtok_r(nullptr, "/", &saveptr);
- }
- if (snprintf(app_name, sizeof(app_name), "%s", pid_name) < 0) {
- app_name[0] = '\0';
- }
- base::Conf::InitFullyQualifiedDomainName();
- const std::string &fqdn = base::Conf::FullyQualifiedDomainName();
- instance_ = new TraceLog{fqdn, app_name, process_id, global::msg_id,
- Osaflog::kServerSocketPath};
- return instance_ != nullptr;
-}
-
-void TraceLog::Log(base::LogMessage::Severity severity, const char *fmt,
- va_list ap) {
- if (instance_ != nullptr) instance_->LogInternal(severity, fmt, ap);
-}
-
-void TraceLog::LogInternal(base::LogMessage::Severity severity, const char
*fmt,
- va_list ap) {
- base::Lock lock(mutex_);
- uint32_t id = sequence_id_;
- sequence_id_ = id < kMaxSequenceId ? id + 1 : 1;
- buffer_.clear();
- base::LogMessage::Write(
- base::LogMessage::Facility::kLocal1, severity, base::ReadRealtimeClock(),
- fqdn_, app_name_, proc_id_, msg_id_,
- {{base::LogMessage::SdName{"meta"},
- {base::LogMessage::Parameter{base::LogMessage::SdName{"sequenceId"},
- std::to_string(id)}}}},
- fmt, ap, &buffer_);
- log_socket_.Send(buffer_.data(), buffer_.size());
-}
+static TraceLog gl_trace;
+static TraceLog gl_osaflog;
static pid_t gettid() { return syscall(SYS_gettid); }
@@ -190,7 +79,7 @@ static void sighup_handler(int sig) {
setlogmask(global::logmask);
}
-void logtrace_output(const char *file, unsigned line, unsigned priority,
+void trace_output(const char *file, unsigned line, unsigned priority,
unsigned category, const char *format, va_list ap) {
char preamble[288];
@@ -199,38 +88,59 @@ void logtrace_output(const char *file, unsigned line,
unsigned priority,
if (strncmp(file, "src/", 4) == 0) file += 4;
snprintf(preamble, sizeof(preamble), "%d:%s:%u %s %s", gettid(), file, line,
global::prefix_name[priority + category], format);
- TraceLog::Log(static_cast<base::LogMessage::Severity>(priority), preamble,
- ap);
+ gl_trace.Log(static_cast<base::LogMessage::Severity>(priority), preamble,
+ ap);
+}
+
+void log_output(const char *file, unsigned line, unsigned priority,
+ unsigned category, const char *format, va_list ap) {
+ char preamble[288];
+
+ assert(priority <= LOG_DEBUG && category < CAT_MAX);
+
+ if (strncmp(file, "src/", 4) == 0) file += 4;
+ snprintf(preamble, sizeof(preamble), "%d:%s:%u %s %s", gettid(), file, line,
+ global::prefix_name[priority + category], format);
+ gl_osaflog.Log(static_cast<base::LogMessage::Severity>(priority), preamble,
+ ap);
}
void logtrace_log(const char *file, unsigned line, int priority,
const char *format, ...) {
va_list ap;
va_list ap2;
+ va_list ap3;
- /* Uncondionally send to syslog */
va_start(ap, format);
va_copy(ap2, ap);
-
- char *tmp_str = nullptr;
- int tmp_str_len = 0;
-
- if ((tmp_str_len = asprintf(&tmp_str, "%s %s", global::prefix_name[priority],
- format)) < 0) {
- vsyslog(priority, format, ap);
- } else {
- vsyslog(priority, tmp_str, ap);
- free(tmp_str);
+ va_copy(ap3, ap);
+
+ /* Only log to syslog if the env var OSAF_LOCAL_NODE_LOG is not set
+ * Or with equal or higher priority than LOG_WARNING,
+ */
+ if (global::enable_osaf_log == false ||
+ (global::enable_osaf_log && priority <= LOG_WARNING)) {
+ char *tmp_str = nullptr;
+ int tmp_str_len = 0;
+ if ((tmp_str_len = asprintf(&tmp_str, "%s %s",
+ global::prefix_name[priority], format)) < 0) {
+ vsyslog(priority, format, ap);
+ } else {
+ vsyslog(priority, tmp_str, ap);
+ free(tmp_str);
+ }
+ }
+ /* Log to osaf_local_node_log file */
+ if (global::enable_osaf_log == true) {
+ log_output(file, line, priority, CAT_LOG, format, ap2);
}
-
/* Only output to file if configured to */
- if (!(global::category_mask & (1 << CAT_LOG))) goto done;
-
- logtrace_output(file, line, priority, CAT_LOG, format, ap2);
-
-done:
+ if (global::category_mask & (1 << CAT_LOG)) {
+ trace_output(file, line, priority, CAT_LOG, format, ap3);
+ }
va_end(ap);
va_end(ap2);
+ va_end(ap3);
}
bool is_logtrace_enabled(unsigned category) {
@@ -245,7 +155,7 @@ void logtrace_trace(const char *file, unsigned line,
unsigned category,
if (is_logtrace_enabled(category) == false) return;
va_start(ap, format);
- logtrace_output(file, line, LOG_DEBUG, category, format, ap);
+ trace_output(file, line, LOG_DEBUG, category, format, ap);
va_end(ap);
}
@@ -266,9 +176,12 @@ int logtrace_init(const char *, const char *pathname,
unsigned mask) {
global::msg_id = nullptr;
}
if (result && mask != 0) {
- result = TraceLog::Init();
+ result = gl_trace.Init(global::msg_id, TraceLog::kBlocking);
+ }
+ if (base::GetEnv("OSAF_LOCAL_NODE_LOG", uint32_t{0}) == 1) {
+ global::enable_osaf_log = true;
+ gl_osaflog.Init(global::osaf_log_file, TraceLog::kBlocking);
}
-
if (result) {
syslog(LOG_INFO, "logtrace: trace enabled to file '%s', mask=0x%x",
global::msg_id, global::category_mask);
@@ -308,7 +221,7 @@ int trace_category_set(unsigned mask) {
if (global::category_mask == 0) {
syslog(LOG_INFO, "logtrace: trace disabled");
} else {
- TraceLog::Init();
+ gl_trace.Init(global::msg_id, TraceLog::kBlocking);
syslog(LOG_INFO, "logtrace: trace enabled to file %s, mask=0x%x",
global::msg_id, global::category_mask);
}
diff --git a/src/base/logtrace.h b/src/base/logtrace.h
index e7c232c..9b20da8 100644
--- a/src/base/logtrace.h
+++ b/src/base/logtrace.h
@@ -37,6 +37,7 @@
#include <syslog.h>
#include <stdarg.h>
#include "base/ncsgl_defs.h"
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -129,7 +130,9 @@ extern void logtrace_trace(const char *file, unsigned line,
unsigned category,
__attribute__((format(printf, 4, 5)));
extern bool is_logtrace_enabled(unsigned category);
-extern void logtrace_output(const char *file, unsigned line, unsigned priority,
+extern void trace_output(const char *file, unsigned line, unsigned priority,
+ unsigned category, const char *format, va_list ap);
+extern void log_output(const char *file, unsigned line, unsigned priority,
unsigned category, const char *format, va_list ap);
/* LOG API. Use same levels as syslog */
@@ -169,13 +172,14 @@ extern void logtrace_output(const char *file, unsigned
line, unsigned priority,
logtrace_trace(__FILE__, __LINE__, CAT_TRACE8, (format), ##args)
#ifdef __cplusplus
+
class Trace {
public:
Trace() {}
~Trace() {
if (!trace_leave_called && is_logtrace_enabled(CAT_TRACE_LEAVE)) {
va_list ap{};
- logtrace_output(file_, 0, LOG_DEBUG, CAT_TRACE_LEAVE, function_, ap);
+ trace_output(file_, 0, LOG_DEBUG, CAT_TRACE_LEAVE, function_, ap);
}
}
void trace(const char *file, const char *function, unsigned line,
@@ -185,7 +189,7 @@ class Trace {
file_ = file;
function_ = function;
va_start(ap, format);
- logtrace_output(file, line, LOG_DEBUG, category, format, ap);
+ trace_output(file, line, LOG_DEBUG, category, format, ap);
va_end(ap);
}
}
@@ -196,7 +200,7 @@ class Trace {
if (is_logtrace_enabled(category)) {
va_start(ap, format);
trace_leave_called = true;
- logtrace_output(file, line, LOG_DEBUG, category, format, ap);
+ trace_output(file, line, LOG_DEBUG, category, format, ap);
va_end(ap);
}
}
diff --git a/src/base/logtrace_client.cc b/src/base/logtrace_client.cc
new file mode 100644
index 0000000..0dac6d3
--- /dev/null
+++ b/src/base/logtrace_client.cc
@@ -0,0 +1,105 @@
+/* -*- OpenSAF -*-
+ *
+ * Copyright Ericsson AB 2018 - All Rights Reserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ */
+
+#include "base/logtrace_client.h"
+#include <limits.h>
+#include <unistd.h>
+#include <cstring>
+#include "base/getenv.h"
+#include "base/ncsgl_defs.h"
+#include "base/osaf_utility.h"
+#include "dtm/common/osaflog_protocol.h"
+
+TraceLog::TraceLog()
+ : sequence_id_{1}, buffer_{} {
+ mutex_ = nullptr;
+ log_socket_ = nullptr;
+}
+
+TraceLog::~TraceLog() {
+ if (mutex_) delete mutex_;
+ if (log_socket_) delete log_socket_;
+}
+
+bool TraceLog::Init(const char *msg_id, WriteMode mode) {
+ char app_name[NAME_MAX];
+ char pid_path[PATH_MAX];
+ uint32_t process_id;
+ char *token, *saveptr;
+ char *pid_name = nullptr;
+
+ if (log_socket_ != nullptr && mutex_ != nullptr) return true;
+
+ memset(app_name, 0, NAME_MAX);
+ memset(pid_path, 0, PATH_MAX);
+ process_id = getpid();
+
+ snprintf(pid_path, sizeof(pid_path), "/proc/%" PRIu32 "/cmdline",
+ process_id);
+ FILE *f = fopen(pid_path, "r");
+ if (f != nullptr) {
+ size_t size;
+ size = fread(pid_path, sizeof(char), PATH_MAX, f);
+ if (size > 0) {
+ if ('\n' == pid_path[size - 1]) pid_path[size - 1] = '\0';
+ }
+ fclose(f);
+ } else {
+ pid_path[0] = '\0';
+ }
+ token = strtok_r(pid_path, "/", &saveptr);
+ while (token != nullptr) {
+ pid_name = token;
+ token = strtok_r(nullptr, "/", &saveptr);
+ }
+ if (snprintf(app_name, sizeof(app_name), "%s", pid_name) < 0) {
+ app_name[0] = '\0';
+ }
+ base::Conf::InitFullyQualifiedDomainName();
+ const std::string &fqdn = base::Conf::FullyQualifiedDomainName();
+
+ fqdn_ = base::LogMessage::HostName(fqdn);
+ app_name_ = base::LogMessage::AppName(app_name);
+ proc_id_ = base::LogMessage::ProcId{std::to_string(process_id)};
+ msg_id_ = base::LogMessage::MsgId{msg_id};
+ log_socket_ = new base::UnixClientSocket{Osaflog::kServerSocketPath,
+ static_cast<base::UnixSocket::Mode>(mode)};
+ mutex_ = new base::Mutex{};
+
+ return true;
+}
+
+void TraceLog::Log(base::LogMessage::Severity severity, const char *fmt,
+ va_list ap) {
+ if (log_socket_ != nullptr && mutex_ != nullptr) {
+ LogInternal(severity, fmt, ap);
+ }
+}
+
+void TraceLog::LogInternal(base::LogMessage::Severity severity, const char
*fmt,
+ va_list ap) {
+ base::Lock lock(*mutex_);
+ uint32_t id = sequence_id_;
+ sequence_id_ = id < kMaxSequenceId ? id + 1 : 1;
+ buffer_.clear();
+ base::LogMessage::Write(
+ base::LogMessage::Facility::kLocal1, severity, base::ReadRealtimeClock(),
+ fqdn_, app_name_, proc_id_, msg_id_,
+ {{base::LogMessage::SdName{"meta"},
+ {base::LogMessage::Parameter{base::LogMessage::SdName{"sequenceId"},
+ std::to_string(id)}}}},
+ fmt, ap, &buffer_);
+ log_socket_->Send(buffer_.data(), buffer_.size());
+}
diff --git a/src/base/logtrace_client.h b/src/base/logtrace_client.h
new file mode 100644
index 0000000..eac31d0
--- /dev/null
+++ b/src/base/logtrace_client.h
@@ -0,0 +1,55 @@
+/* -*- OpenSAF -*-
+ *
+ * Copyright Ericsson AB 2018 - All Rights Reserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ */
+
+#ifndef BASE_LOGTRACE_CLIENT_H_
+#define BASE_LOGTRACE_CLIENT_H_
+
+#include "base/log_message.h"
+#include "base/unix_client_socket.h"
+#include "base/buffer.h"
+#include "base/conf.h"
+#include "base/macros.h"
+#include "base/mutex.h"
+
+// A class implements trace/log client that communicates to the log server
+// running in osaftransportd.
+class TraceLog {
+ public:
+ enum WriteMode {
+ kBlocking = base::UnixSocket::Mode::kBlocking,
+ kNonblocking = base::UnixSocket::Mode::kNonblocking,
+ };
+ bool Init(const char *msg_id, WriteMode mode);
+ void Log(base::LogMessage::Severity severity, const char *fmt,
+ va_list ap);
+ TraceLog();
+ ~TraceLog();
+
+ private:
+ void LogInternal(base::LogMessage::Severity severity, const char *fmt,
+ va_list ap);
+ static constexpr const uint32_t kMaxSequenceId = uint32_t{0x7fffffff};
+ base::LogMessage::HostName fqdn_{""};
+ base::LogMessage::AppName app_name_{""};
+ base::LogMessage::ProcId proc_id_{""};
+ base::LogMessage::MsgId msg_id_{""};
+ uint32_t sequence_id_;
+ base::UnixClientSocket* log_socket_;
+ base::Buffer<512> buffer_;
+ base::Mutex* mutex_;
+ DELETE_COPY_AND_MOVE_OPERATORS(TraceLog);
+};
+
+#endif // BASE_LOGTRACE_CLIENT_H_
diff --git a/src/mds/mds_log.cc b/src/mds/mds_log.cc
index 5acae55..0792975 100644
--- a/src/mds/mds_log.cc
+++ b/src/mds/mds_log.cc
@@ -23,127 +23,13 @@
******************************************************************************
*/
-#include <cinttypes>
#include "mds/mds_log.h"
-#include <sys/time.h>
-#include <time.h>
-#include <unistd.h>
-#include <cstdarg>
-#include <cstdio>
-#include <cstring>
-#include <string>
-#include "base/buffer.h"
-#include "base/conf.h"
-#include "base/log_message.h"
-#include "base/macros.h"
-#include "base/mutex.h"
-#include "base/ncsgl_defs.h"
-#include "base/osaf_utility.h"
-#include "base/time.h"
-#include "base/unix_client_socket.h"
-#include "dtm/common/osaflog_protocol.h"
+#include "base/logtrace_client.h"
#include "mds/mds_dt2c.h"
#include "mds/mds_papi.h"
-class MdsLog {
- public:
- static bool Init();
- static void Log(base::LogMessage::Severity severity, const char *fmt,
- va_list ap);
-
- private:
- MdsLog(const std::string &fqdn, const char *app_name, uint32_t proc_id,
- const char *socket_name);
- void LogInternal(base::LogMessage::Severity severity, const char *fmt,
- va_list ap);
- static constexpr const uint32_t kMaxSequenceId = uint32_t{0x7fffffff};
- static MdsLog *instance_;
- const base::LogMessage::HostName fqdn_;
- const base::LogMessage::AppName app_name_;
- const base::LogMessage::ProcId proc_id_;
- uint32_t sequence_id_;
- base::UnixClientSocket log_socket_;
- base::Buffer<512> buffer_;
- base::Mutex mutex_;
-
- DELETE_COPY_AND_MOVE_OPERATORS(MdsLog);
-};
-
int gl_mds_log_level = 3;
-MdsLog *MdsLog::instance_ = nullptr;
-
-MdsLog::MdsLog(const std::string &fqdn, const char *app_name, uint32_t proc_id,
- const char *socket_name)
- : fqdn_{base::LogMessage::HostName{fqdn}},
- app_name_{base::LogMessage::AppName{app_name}},
- proc_id_{base::LogMessage::ProcId{std::to_string(proc_id)}},
- sequence_id_{1},
- log_socket_{socket_name, base::UnixSocket::kNonblocking},
- buffer_{},
- mutex_{} {}
-
-/*****************************************************
- Function NAME: get_process_name()
- Returns : <process_name>[<pid> or <tipc_port_ref>]
-*****************************************************/
-bool MdsLog::Init() {
- if (instance_ != nullptr) return false;
- char app_name[MDS_MAX_PROCESS_NAME_LEN];
- char pid_path[1024];
- uint32_t process_id = getpid();
- char *token, *saveptr;
- char *pid_name = nullptr;
-
- memset(app_name, 0, MDS_MAX_PROCESS_NAME_LEN);
- memset(pid_path, 0, 1024);
-
- snprintf(pid_path, sizeof(pid_path), "/proc/%" PRIu32 "/cmdline",
process_id);
- FILE *f = fopen(pid_path, "r");
- if (f != nullptr) {
- size_t size;
- size = fread(pid_path, sizeof(char), 1024, f);
- if (size > 0) {
- if ('\n' == pid_path[size - 1]) pid_path[size - 1] = '\0';
- }
- fclose(f);
- } else {
- pid_path[0] = '\0';
- }
- token = strtok_r(pid_path, "/", &saveptr);
- while (token != nullptr) {
- pid_name = token;
- token = strtok_r(nullptr, "/", &saveptr);
- }
- if (snprintf(app_name, sizeof(app_name), "%s", pid_name) < 0) {
- app_name[0] = '\0';
- }
- base::Conf::InitFullyQualifiedDomainName();
- const std::string &fqdn = base::Conf::FullyQualifiedDomainName();
- instance_ =
- new MdsLog{fqdn, app_name, process_id, Osaflog::kServerSocketPath};
- return instance_ != nullptr;
-}
-
-void MdsLog::Log(base::LogMessage::Severity severity, const char *fmt,
- va_list ap) {
- if (instance_ != nullptr) instance_->LogInternal(severity, fmt, ap);
-}
-
-void MdsLog::LogInternal(base::LogMessage::Severity severity, const char *fmt,
- va_list ap) {
- base::Lock lock(mutex_);
- uint32_t id = sequence_id_;
- sequence_id_ = id < kMaxSequenceId ? id + 1 : 1;
- buffer_.clear();
- base::LogMessage::Write(
- base::LogMessage::Facility::kLocal1, severity, base::ReadRealtimeClock(),
- fqdn_, app_name_, proc_id_, base::LogMessage::MsgId{"mds.log"},
- {{base::LogMessage::SdName{"meta"},
- {base::LogMessage::Parameter{base::LogMessage::SdName{"sequenceId"},
- std::to_string(id)}}}},
- fmt, ap, &buffer_);
- log_socket_.Send(buffer_.data(), buffer_.size());
-}
+static TraceLog gl_mds_log;
/*******************************************************************************
* Funtion Name : mds_log_init
@@ -154,7 +40,9 @@ void MdsLog::LogInternal(base::LogMessage::Severity
severity, const char *fmt,
*
*******************************************************************************/
uint32_t mds_log_init(const char *) {
- if (!MdsLog::Init()) return NCSCC_RC_FAILURE;
+ if (!gl_mds_log.Init("mds.log", TraceLog::kNonblocking)) {
+ return NCSCC_RC_FAILURE;
+ }
tzset();
log_mds_notify("BEGIN MDS LOGGING| ARCHW=%x|64bit=%zu\n", MDS_SELF_ARCHWORD,
MDS_WORD_SIZE_TYPE);
@@ -173,7 +61,7 @@ void log_mds_critical(const char *fmt, ...) {
if (gl_mds_log_level < NCSMDS_LC_CRITICAL) return;
va_list ap;
va_start(ap, fmt);
- MdsLog::Log(base::LogMessage::Severity::kCrit, fmt, ap);
+ gl_mds_log.Log(base::LogMessage::Severity::kCrit, fmt, ap);
va_end(ap);
}
@@ -189,7 +77,7 @@ void log_mds_err(const char *fmt, ...) {
if (gl_mds_log_level < NCSMDS_LC_ERR) return;
va_list ap;
va_start(ap, fmt);
- MdsLog::Log(base::LogMessage::Severity::kErr, fmt, ap);
+ gl_mds_log.Log(base::LogMessage::Severity::kErr, fmt, ap);
va_end(ap);
}
@@ -205,7 +93,7 @@ void log_mds_notify(const char *fmt, ...) {
if (gl_mds_log_level < NCSMDS_LC_NOTIFY) return;
va_list ap;
va_start(ap, fmt);
- MdsLog::Log(base::LogMessage::Severity::kNotice, fmt, ap);
+ gl_mds_log.Log(base::LogMessage::Severity::kNotice, fmt, ap);
va_end(ap);
}
@@ -221,7 +109,7 @@ void log_mds_info(const char *fmt, ...) {
if (gl_mds_log_level < NCSMDS_LC_INFO) return;
va_list ap;
va_start(ap, fmt);
- MdsLog::Log(base::LogMessage::Severity::kInfo, fmt, ap);
+ gl_mds_log.Log(base::LogMessage::Severity::kInfo, fmt, ap);
va_end(ap);
}
@@ -238,6 +126,6 @@ void log_mds_dbg(const char *fmt, ...) {
if (gl_mds_log_level < NCSMDS_LC_DBG) return;
va_list ap;
va_start(ap, fmt);
- MdsLog::Log(base::LogMessage::Severity::kDebug, fmt, ap);
+ gl_mds_log.Log(base::LogMessage::Severity::kDebug, fmt, ap);
va_end(ap);
}
--
2.7.4
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel