summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/Logger.hpp88
-rw-r--r--test/core/LoggerTest.cpp20
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));
+}
}