From f625c74501185e0ce8064ea704efc2eaeaf44e19 Mon Sep 17 00:00:00 2001 From: Huynh Tran Date: Sun, 19 Jun 2005 09:05:46 +0000 Subject: Added tee mode to Logger. --- src/utils/logger.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++---- src/utils/logger.h | 12 ++++++++ 2 files changed, 83 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/utils/logger.cpp b/src/utils/logger.cpp index 5010ed66..bfba7abe 100644 --- a/src/utils/logger.cpp +++ b/src/utils/logger.cpp @@ -99,13 +99,33 @@ Logger::setTimestamp(bool flag) } +/** + * Set tee mode. + */ +void +Logger::setTeeMode(bool flag) + throw() +{ + mTeeMode = flag; +} + + /** * Log a generic message. */ void Logger::log(const std::string& msg) { - log((mLogFile.is_open() ? mLogFile : std::cout), msg); + if (mTeeMode) { + log(std::cout, msg); + + if (mLogFile.is_open()) { + log(mLogFile, msg); + } + } + else { + log((mLogFile.is_open() ? mLogFile : std::cout), msg); + } } @@ -115,7 +135,16 @@ Logger::log(const std::string& msg) void Logger::debug(const std::string& msg) { - log((mLogFile.is_open() ? mLogFile : std::cout), msg, "[DBG]"); + if (mTeeMode) { + log(std::cout, msg, "[DBG]"); + + if (mLogFile.is_open()) { + log(mLogFile, msg, "[DBG]"); + } + } + else { + log((mLogFile.is_open() ? mLogFile : std::cout), msg, "[DBG]"); + } } @@ -125,7 +154,16 @@ Logger::debug(const std::string& msg) void Logger::info(const std::string& msg) { - log((mLogFile.is_open() ? mLogFile : std::cout), msg, "[INF]"); + if (mTeeMode) { + log(std::cout, msg, "[INF]"); + + if (mLogFile.is_open()) { + log(mLogFile, msg, "[INF]"); + } + } + else { + log((mLogFile.is_open() ? mLogFile : std::cout), msg, "[INF]"); + } } @@ -135,7 +173,16 @@ Logger::info(const std::string& msg) void Logger::warn(const std::string& msg) { - log((mLogFile.is_open() ? mLogFile : std::cerr), msg, "[WRN]"); + if (mTeeMode) { + log(std::cerr, msg, "[WRN]"); + + if (mLogFile.is_open()) { + log(mLogFile, msg, "[WRN]"); + } + } + else { + log((mLogFile.is_open() ? mLogFile : std::cerr), msg, "[WRN]"); + } } @@ -145,7 +192,16 @@ Logger::warn(const std::string& msg) void Logger::error(const std::string& msg) { - log((mLogFile.is_open() ? mLogFile : std::cerr), msg, "[ERR]"); + if (mTeeMode) { + log(std::cerr, msg, "[ERR]"); + + if (mLogFile.is_open()) { + log(mLogFile, msg, "[ERR]"); + } + } + else { + log((mLogFile.is_open() ? mLogFile : std::cerr), msg, "[ERR]"); + } } @@ -155,7 +211,16 @@ Logger::error(const std::string& msg) void Logger::fatal(const std::string& msg) { - log((mLogFile.is_open() ? mLogFile : std::cerr), msg, "[FTL]"); + if (mTeeMode) { + log(std::cerr, msg, "[FTL]"); + + if (mLogFile.is_open()) { + log(mLogFile, msg, "[FTL]"); + } + } + else { + log((mLogFile.is_open() ? mLogFile : std::cerr), msg, "[FTL]"); + } #ifdef WIN32 MessageBox(NULL, msg.c_str(), "Fatal error", MB_ICONERROR | MB_OK); diff --git a/src/utils/logger.h b/src/utils/logger.h index be8d7d3e..bdfa905e 100644 --- a/src/utils/logger.h +++ b/src/utils/logger.h @@ -119,6 +119,17 @@ class Logger: public Singleton throw(); + /** + * Set tee mode. + * + * @param flag if true, write messages to both the standard (or error) + * output and the log file (if set) (default = false). + */ + void + setTeeMode(bool flag = false) + throw(); + + /** * Log a generic message. * @@ -240,6 +251,7 @@ class Logger: public Singleton private: std::ofstream mLogFile; /**< the log file */ bool mHasTimestamp; /**< the timestamp flag */ + bool mTeeMode; /**< the tee mode flag */ }; -- cgit v1.2.3-70-g09d2