From a23c51bcb1b8d85b1ea06a7a16729fa4b87d8fd4 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Fri, 5 Dec 2014 12:29:45 +0100 Subject: added logAt functions --- src/core/Logger.hpp | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ test/core/LoggerTest.cpp | 20 ++++++++--- 2 files changed, 104 insertions(+), 4 deletions(-) diff --git a/src/core/Logger.hpp b/src/core/Logger.hpp index a30374c..fd7bb08 100644 --- a/src/core/Logger.hpp +++ b/src/core/Logger.hpp @@ -240,6 +240,23 @@ public: log(severity, msg, currentFilename(), line, column); } + /** + * Logs the given message. The file name is set to the topmost file name on + * the file name stack. + * + * @param severity is the severity of the log message. + * @param msg is the actual log message. + * @param pos is a const reference to a variable which provides position + * information. + * @tparam PosType is the actual type of pos and must implement a getLine + * and getColumn function. + */ + template + void logAt(Severity severity, const std::string &msg, const PosType &pos) + { + log(severity, msg, pos.getLine(), pos.getColumn()); + } + /** * Logs the given loggable exception. * @@ -282,6 +299,21 @@ public: debug(msg, currentFilename(), line, column); } + /** + * Logs a debug message. The file name is set to the topmost file name on + * the file name stack. + * + * @param severity is the severity of the log message. + * @param msg is the actual log message. + * @param pos is a const reference to a variable which provides position + * information. + */ + template + void debugAt(const std::string &msg, const PosType &pos) + { + debug(msg, pos.getLine(), pos.getColumn()); + } + /** * Logs a note. The file name is set to the topmost file name on * the file name stack. @@ -313,6 +345,20 @@ public: note(msg, currentFilename(), line, column); } + /** + * Logs a note. The file name is set to the topmost file name on + * the file name stack. + * + * @param msg is the actual log message. + * @param pos is a const reference to a variable which provides position + * information. + */ + template + void noteAt(const std::string &msg, const PosType &pos) + { + note(msg, pos.getLine(), pos.getColumn()); + } + /** * Logs a warning. The file name is set to the topmost file name on * the file name stack. @@ -329,6 +375,20 @@ public: log(Severity::WARNING, msg, file, line, column); } + /** + * Logs a warning. The file name is set to the topmost file name on + * the file name stack. + * + * @param msg is the actual log message. + * @param pos is a const reference to a variable which provides position + * information. + */ + template + void warningAt(const std::string &msg, const PosType &pos) + { + warning(msg, pos.getLine(), pos.getColumn()); + } + /** * Logs a warning. The file name is set to the topmost file name on * the file name stack. @@ -375,6 +435,20 @@ public: error(msg, currentFilename(), line, column); } + /** + * Logs an error message. The file name is set to the topmost file name on + * the file name stack. + * + * @param msg is the actual log message. + * @param pos is a const reference to a variable which provides position + * information. + */ + template + void errorAt(const std::string &msg, const PosType &pos) + { + error(msg, pos.getLine(), pos.getColumn()); + } + /** * Logs a fatal error. The file name is set to the topmost file name on * the file name stack. @@ -406,6 +480,20 @@ public: fatalError(msg, currentFilename(), line, column); } + /** + * Logs a fatal error. The file name is set to the topmost file name on + * the file name stack. + * + * @param msg is the actual log message. + * @param pos is a const reference to a variable which provides position + * information. + */ + template + void fatalErrorAt(const std::string &msg, const PosType &pos) + { + fatalError(msg, pos.getLine(), pos.getColumn()); + } + /** * Pushes a new file name onto the internal filename stack. * diff --git a/test/core/LoggerTest.cpp b/test/core/LoggerTest.cpp index 7031dc7..b4549ed 100644 --- a/test/core/LoggerTest.cpp +++ b/test/core/LoggerTest.cpp @@ -24,6 +24,13 @@ namespace ousia { +struct Pos { + int line, column; + Pos(int line, int column) : line(line), column(column) {}; + int getLine() const { return line; } + int getColumn() const { return column; } +}; + TEST(TerminalLogger, log) { // Test for manual visual expection only -- no assertions @@ -34,8 +41,11 @@ TEST(TerminalLogger, log) logger.debug("This is a test debug message with no column", 10); logger.debug("This is a test debug message with no line"); logger.debug("This is a test debug message with no file", ""); - logger.debug("This is a test debug message with no file but a line", "", 10); - logger.debug("This is a test debug message with no file but a line and a column", "", 10, 20); + logger.debug("This is a test debug message with no file but a line", "", + 10); + logger.debug( + "This is a test debug message with no file but a line and a column", "", + 10, 20); logger.note("This is a test note", 10, 20); logger.warning("This is a test warning", 10, 20); logger.error("This is a test error", 10, 20); @@ -43,10 +53,12 @@ TEST(TerminalLogger, log) try { throw LoggableException{"A fatal exception"}; - } catch (const LoggableException &ex) { + } + catch (const LoggableException &ex) { logger.log(ex); } -} + logger.logAt(Severity::ERROR, "This is a positioned error", Pos(10, 20)); +} } -- cgit v1.2.3