diff options
author | Edwin Mons <edwin.mons@isode.com> | 2019-11-13 12:03:22 (GMT) |
---|---|---|
committer | Edwin Mons <edwin.mons@isode.com> | 2019-11-13 12:46:21 (GMT) |
commit | d640ec248ca8bf86a03007a0f8df352df696cf92 (patch) | |
tree | 049bda0ad8e3fe50eda047b5e8086fd903cb5afe /Swiften/Base/UnitTest/LogTest.cpp | |
parent | 959a42d21fd70ea002da9afa7482194e8b6097e1 (diff) | |
download | swift-d640ec248ca8bf86a03007a0f8df352df696cf92.zip swift-d640ec248ca8bf86a03007a0f8df352df696cf92.tar.bz2 |
Support application-supplied logging
This adds a method to set a logging callback. If such a callback is
set, all SWIFT_LOG calls will invoke this callback instead of writing to
either stderr or the swift logging file.
Test-Information:
Updated unit tests pass.
Checked that logs generated by Swift and Sluift (which do not set the
callback) resulted in logging in the expected location.
Change-Id: I0eb2a1057aa77839e1b8d5f320205eb9d5fdc253
Diffstat (limited to 'Swiften/Base/UnitTest/LogTest.cpp')
-rw-r--r-- | Swiften/Base/UnitTest/LogTest.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Swiften/Base/UnitTest/LogTest.cpp b/Swiften/Base/UnitTest/LogTest.cpp new file mode 100644 index 0000000..5d710db --- /dev/null +++ b/Swiften/Base/UnitTest/LogTest.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + +#include <vector> + +#include <boost/algorithm/string/predicate.hpp> + +#include <gtest/gtest.h> + +#include <Swiften/Base/Log.h> + +using namespace Swift; + +struct LogEntry { + LogEntry(Log::Severity severity, std::string file, int line, std::string function, std::string message) : severity(severity), file(std::move(file)), line(line), function(std::move(function)), message(std::move(message)) {} + + Log::Severity severity; + std::string file; + int line; + std::string function; + std::string message; +}; + +// Helper class to set the logging callback. Using this class to set it will ensure the +// logCallback is reset to empty (its default state) after each test. +class LogCallbackSetter { +public: + LogCallbackSetter(Log::Callback callback) { + Log::setLogCallback(callback); + } + ~LogCallbackSetter() { + Log::setLogCallback({}); + } +}; + +TEST(LogTest, testCallback) { + std::vector<LogEntry> logEntries; + LogCallbackSetter callbackSetter = {[&](Log::Severity severity, const std::string& file, int line, const std::string& function, const std::string& message) { + logEntries.emplace_back(severity, file, line, function, message); + }}; + + SWIFT_LOG(error) << "An error"; + ASSERT_EQ(1, logEntries.size()); + ASSERT_EQ(Log::error, logEntries[0].severity); + ASSERT_EQ("An error", logEntries[0].message); +} |