diff options
-rw-r--r-- | src/core/Logger.hpp | 88 | ||||
-rw-r--r-- | 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 @@ -241,6 +241,23 @@ public: } /** + * 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<class PosType> + void logAt(Severity severity, const std::string &msg, const PosType &pos) + { + log(severity, msg, pos.getLine(), pos.getColumn()); + } + + /** * Logs the given loggable exception. * * @param ex is the exception that should be logged. @@ -283,6 +300,21 @@ public: } /** + * 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<class PosType> + 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. * @@ -314,6 +346,20 @@ public: } /** + * 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<class PosType> + 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. * @@ -334,6 +380,20 @@ public: * 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<class PosType> + 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. + * + * @param msg is the actual log message. * @param line is the line in the above file at which the error occured. * Ignored if negative. * @param column is the column in the above file at which the error occured. @@ -376,6 +436,20 @@ public: } /** + * 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<class PosType> + 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. * @@ -407,6 +481,20 @@ public: } /** + * 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<class PosType> + 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. * * @param name is the name of the file that should be added to the filename 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)); +} } |