summaryrefslogtreecommitdiffstats
path: root/vespalog
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-10-23 14:51:55 +0200
committerTor Egge <Tor.Egge@online.no>2022-10-23 14:51:55 +0200
commit33a1ad38ba6d92961529a76007c26bb1f5c6343d (patch)
treebd779ca411ed7a6aa1b75402e5632ea8937554a4 /vespalog
parent1579514b4a757e9038728dbbeecd27a8b812ce66 (diff)
Use singleton for ns_log::BufferedLogger.
Diffstat (limited to 'vespalog')
-rw-r--r--vespalog/src/test/bufferedlogskiptest.cpp8
-rw-r--r--vespalog/src/test/bufferedlogtest.cpp20
-rw-r--r--vespalog/src/vespa/log/bufferedlogger.cpp9
-rw-r--r--vespalog/src/vespa/log/bufferedlogger.h26
-rw-r--r--vespalog/src/vespa/log/log.cpp2
5 files changed, 35 insertions, 30 deletions
diff --git a/vespalog/src/test/bufferedlogskiptest.cpp b/vespalog/src/test/bufferedlogskiptest.cpp
index 56f59541eaf..ac0bb585be9 100644
--- a/vespalog/src/test/bufferedlogskiptest.cpp
+++ b/vespalog/src/test/bufferedlogskiptest.cpp
@@ -61,9 +61,9 @@ void testSkipBufferOnDebug(const std::string& file, uint64_t & timer)
void reset(uint64_t & timer) {
timer = 0;
- ns_log::BufferedLogger::logger.setMaxCacheSize(10);
- ns_log::BufferedLogger::logger.setMaxEntryAge(300);
- ns_log::BufferedLogger::logger.setCountFactor(5);
+ ns_log::BufferedLogger::instance().setMaxCacheSize(10);
+ ns_log::BufferedLogger::instance().setMaxEntryAge(300);
+ ns_log::BufferedLogger::instance().setCountFactor(5);
}
int
@@ -76,7 +76,7 @@ main(int argc, char **argv)
ns_log::Logger::fakePid = true;
uint64_t timer;
logger.setTimer(std::unique_ptr<ns_log::Timer>(new ns_log::TestTimer(timer)));
- ns_log::BufferedLogger::logger.setTimer(std::unique_ptr<ns_log::Timer>(new ns_log::TestTimer(timer)));
+ ns_log::BufferedLogger::instance().setTimer(std::unique_ptr<ns_log::Timer>(new ns_log::TestTimer(timer)));
reset(timer);
testSkipBufferOnDebug(argv[1], timer);
diff --git a/vespalog/src/test/bufferedlogtest.cpp b/vespalog/src/test/bufferedlogtest.cpp
index 39990a26b2a..8399fa81dfa 100644
--- a/vespalog/src/test/bufferedlogtest.cpp
+++ b/vespalog/src/test/bufferedlogtest.cpp
@@ -112,9 +112,9 @@ void testThatEntriesWithHighCountsAreEventuallyRemoved(
// Should eventually throw out the entries with high count
timer = 10 * 1000000 + 4;
// Make sure we don't remove due to age.
- ns_log::BufferedLogger::logger.setMaxEntryAge(1000000);
+ ns_log::BufferedLogger::instance().setMaxEntryAge(1000000);
// Let each count, count for 5 seconds.
- ns_log::BufferedLogger::logger.setCountFactor(5);
+ ns_log::BufferedLogger::instance().setCountFactor(5);
LOGBM(info, "Starting up, using logfile %s", file.c_str());
timer = 100 * 1000000 + 4;
@@ -147,9 +147,9 @@ void testThatEntriesExpire(
// Test that we don't keep entries longer than max age
timer = 10 * 1000000 + 4;
// Time out after 120 seconds
- ns_log::BufferedLogger::logger.setMaxEntryAge(120);
+ ns_log::BufferedLogger::instance().setMaxEntryAge(120);
// Let counts count much, so they expire due to time instead
- ns_log::BufferedLogger::logger.setCountFactor(100000);
+ ns_log::BufferedLogger::instance().setCountFactor(100000);
LOGBM(info, "Starting up, using logfile %s", file.c_str());
timer = 100 * 1000000 + 4;
@@ -217,9 +217,9 @@ void testThatHighCountEntriesDontStarveOthers(
std::cerr << "testThatHighCountEntriesDontStarveOthers ...\n";
timer = 10 * 1000000 + 4;
// Long time out, we don't want to rely on timeout to prevent starvation
- ns_log::BufferedLogger::logger.setMaxEntryAge(12000000);
+ ns_log::BufferedLogger::instance().setMaxEntryAge(12000000);
// Let counts count much, so they score high
- ns_log::BufferedLogger::logger.setCountFactor(100000);
+ ns_log::BufferedLogger::instance().setCountFactor(100000);
LOGBM(info, "Starting up, using logfile %s", file.c_str());
timer = 100 * 1000000;
@@ -372,8 +372,8 @@ void testNonBufferedLoggerTriggersBufferedLogTrim(const std::string& file,
void reset(uint64_t& timer) {
timer = 0;
- ns_log::BufferedLogger::logger.setMaxEntryAge(300);
- ns_log::BufferedLogger::logger.setCountFactor(5);
+ ns_log::BufferedLogger::instance().setMaxEntryAge(300);
+ ns_log::BufferedLogger::instance().setCountFactor(5);
}
int
@@ -384,10 +384,10 @@ main(int argc, char **argv)
return EXIT_FAILURE;
}
ns_log::Logger::fakePid = true;
- ns_log::BufferedLogger::logger.setMaxCacheSize(10);
+ ns_log::BufferedLogger::instance().setMaxCacheSize(10);
uint64_t timer;
logger.setTimer(std::unique_ptr<ns_log::Timer>(new ns_log::TestTimer(timer)));
- ns_log::BufferedLogger::logger.setTimer(std::unique_ptr<ns_log::Timer>(new ns_log::TestTimer(timer)));
+ ns_log::BufferedLogger::instance().setTimer(std::unique_ptr<ns_log::Timer>(new ns_log::TestTimer(timer)));
reset(timer);
testThatEntriesWithHighCountIsKept(argv[1], timer);
diff --git a/vespalog/src/vespa/log/bufferedlogger.cpp b/vespalog/src/vespa/log/bufferedlogger.cpp
index 607c8f06766..33ff3da7366 100644
--- a/vespalog/src/vespa/log/bufferedlogger.cpp
+++ b/vespalog/src/vespa/log/bufferedlogger.cpp
@@ -181,8 +181,6 @@ BackingBuffer::Entry::getAgeFactor() const
return _timestamp + _countFactor * _count;
}
-BufferedLogger BufferedLogger::logger;
-
BackingBuffer::BackingBuffer()
: _timer(new Timer),
_mutex(),
@@ -383,4 +381,11 @@ BufferedLogger::setTimer(std::unique_ptr<Timer> timer)
_backing->_timer = std::move(timer);
}
+BufferedLogger&
+BufferedLogger::instance()
+{
+ static BufferedLogger logger;
+ return logger;
+}
+
} // ns_log
diff --git a/vespalog/src/vespa/log/bufferedlogger.h b/vespalog/src/vespa/log/bufferedlogger.h
index d31425921f4..373f81b5160 100644
--- a/vespalog/src/vespa/log/bufferedlogger.h
+++ b/vespalog/src/vespa/log/bufferedlogger.h
@@ -95,9 +95,9 @@
if (logger.wants(ns_log::Logger::debug)) { \
logger.doLog(ns_log::Logger::level, \
__FILE__, __LINE__, __VA_ARGS__); \
- ns_log::BufferedLogger::logger.trimCache(); \
+ ns_log::BufferedLogger::instance().trimCache(); \
} else { \
- ns_log::BufferedLogger::logger.doLog(logger, \
+ ns_log::BufferedLogger::instance().doLog(logger, \
ns_log::Logger::level, __FILE__, __LINE__, \
"", __VA_ARGS__); \
} \
@@ -108,15 +108,15 @@
// Define LOGBM macro for logging buffered, using the message itself as a
// token. This is the same as LOG defined above if
// VESPA_LOG_USELOGBUFFERFORREGULARLOG is defined.
-#define LOGBM(level, ...) \
- do { \
+#define LOGBM(level, ...) \
+ do { \
if (logger.wants(ns_log::Logger::level)) { \
if (logger.wants(ns_log::Logger::debug)) { \
logger.doLog(ns_log::Logger::level, \
__FILE__, __LINE__, __VA_ARGS__); \
- ns_log::BufferedLogger::logger.trimCache(); \
+ ns_log::BufferedLogger::instance().trimCache(); \
} else { \
- ns_log::BufferedLogger::logger.doLog(logger, \
+ ns_log::BufferedLogger::instance().doLog(logger, \
ns_log::Logger::level, __FILE__, __LINE__, \
"", __VA_ARGS__); \
} \
@@ -131,11 +131,11 @@
if (logger.wants(ns_log::Logger::debug)) { \
logger.doLog(ns_log::Logger::level, \
__FILE__, __LINE__, ##ARGS); \
- ns_log::BufferedLogger::logger.trimCache(); \
+ ns_log::BufferedLogger::instance().trimCache(); \
} else { \
std::ostringstream ost123; \
ost123 << __FILE__ << ":" << __LINE__; \
- ns_log::BufferedLogger::logger.doLog(logger, \
+ ns_log::BufferedLogger::instance().doLog(logger, \
ns_log::Logger::level, \
__FILE__, __LINE__, ost123.str(), ##ARGS); \
} \
@@ -149,9 +149,9 @@
if (logger.wants(ns_log::Logger::debug)) { \
logger.doLog(ns_log::Logger::level, \
__FILE__, __LINE__, __VA_ARGS__); \
- ns_log::BufferedLogger::logger.trimCache(); \
+ ns_log::BufferedLogger::instance().trimCache(); \
} else { \
- ns_log::BufferedLogger::logger.doLog(logger, \
+ ns_log::BufferedLogger::instance().doLog(logger, \
ns_log::Logger::level, \
__FILE__, __LINE__, token, __VA_ARGS__); \
} \
@@ -159,7 +159,7 @@
} while (false)
#define LOGB_FLUSH() \
- ns_log::BufferedLogger::logger.flush()
+ ns_log::BufferedLogger::instance().flush()
namespace ns_log {
@@ -171,8 +171,6 @@ class BufferedLogger {
BufferedLogger & operator = (const BufferedLogger & buf);
public:
- static BufferedLogger logger;
-
BufferedLogger();
~BufferedLogger();
@@ -198,6 +196,8 @@ public:
/** Trim the buffer. Removing old messages if wanted. */
void trimCache();
+
+ static BufferedLogger& instance();
};
} // ns_log
diff --git a/vespalog/src/vespa/log/log.cpp b/vespalog/src/vespa/log/log.cpp
index a7394b5848b..7f2668a97ce 100644
--- a/vespalog/src/vespa/log/log.cpp
+++ b/vespalog/src/vespa/log/log.cpp
@@ -239,7 +239,7 @@ Logger::doLog(LogLevel level, const char *file, int line, const char *fmt, ...)
actualSize = tryLog(sizeofPayload, level, file, line, fmt, args);
va_end(args);
} while (sizeofPayload < actualSize);
- ns_log::BufferedLogger::logger.trimCache();
+ ns_log::BufferedLogger::instance().trimCache();
}
void Logger::doLogCore(uint64_t timestamp, LogLevel level,