From a5c3ba0fdd730498fb569294acb25f4514bd9c29 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 12 Dec 2018 01:47:29 +0000 Subject: [PATCH] Move logger.hpp to llarp/ --- daemon/main.cpp | 11 +- include/llarp/aligned.hpp | 2 +- include/llarp/bencode.hpp | 2 +- include/llarp/codel.hpp | 7 +- include/llarp/logger.hpp | 278 ------------------------ libabyss/src/client.cpp | 2 +- libabyss/src/server.cpp | 2 +- llarp/bencode.cpp | 2 +- llarp/dns.cpp | 2 +- llarp/dns/message.cpp | 2 +- llarp/dns/question.cpp | 2 +- llarp/dns/rr.cpp | 2 +- llarp/dnsc.cpp | 2 +- llarp/linux/netns.cpp | 2 +- llarp/logger.hpp | 279 ++++++++++++++++++++++++- test/base32_unittest.cpp | 2 +- vendor/libtuntap-master/tuntap.cpp | 2 +- vendor/libtuntap-master/tuntap_log.cpp | 2 +- 18 files changed, 301 insertions(+), 302 deletions(-) delete mode 100644 include/llarp/logger.hpp diff --git a/daemon/main.cpp b/daemon/main.cpp index 9571c6516..adfb46fc4 100644 --- a/daemon/main.cpp +++ b/daemon/main.cpp @@ -1,12 +1,13 @@ +#include // for ensure_config +#include +#include +#include #include -#include +#include #include -#include + #include #include -#include -#include "fs.hpp" -#include "config.hpp" // for ensure_config #ifdef _WIN32 #define wmin(x, y) (((x) < (y)) ? (x) : (y)) diff --git a/include/llarp/aligned.hpp b/include/llarp/aligned.hpp index 1a53492d3..a0cf0820d 100644 --- a/include/llarp/aligned.hpp +++ b/include/llarp/aligned.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include diff --git a/include/llarp/bencode.hpp b/include/llarp/bencode.hpp index 70a240c58..f09fc5b2c 100644 --- a/include/llarp/bencode.hpp +++ b/include/llarp/bencode.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include diff --git a/include/llarp/codel.hpp b/include/llarp/codel.hpp index 9ba3aed10..5c101b846 100644 --- a/include/llarp/codel.hpp +++ b/include/llarp/codel.hpp @@ -1,15 +1,14 @@ #ifndef LLARP_CODEL_QUEUE_HPP #define LLARP_CODEL_QUEUE_HPP -#include -#include #include #include +#include +#include #include +#include #include #include - -#include #include namespace llarp diff --git a/include/llarp/logger.hpp b/include/llarp/logger.hpp deleted file mode 100644 index 96c2415ea..000000000 --- a/include/llarp/logger.hpp +++ /dev/null @@ -1,278 +0,0 @@ -#ifndef LLARP_LOGGER_HPP -#define LLARP_LOGGER_HPP -#include -#include -#include -#include -#include -#include -#include -#ifdef _WIN32 -#define VC_EXTRALEAN -#include -#endif -#ifdef ANDROID -#include -#endif -#ifdef RPI -#include -#endif - -namespace llarp -{ - // probably will need to move out of llarp namespace for c api - enum LogLevel - { - eLogDebug, - eLogInfo, - eLogWarn, - eLogError, - eLogNone - }; - - struct Logger - { - std::string nodeName; - LogLevel minlevel = eLogInfo; - std::ostream& out; - - std::function< void(const std::string&) > customLog; - - llarp::util::Mutex access; -#ifdef _WIN32 - bool isConsoleModern = - true; // qol fix so oldfag clients don't see ugly escapes - HANDLE fd1 = GetStdHandle(STD_OUTPUT_HANDLE); - CONSOLE_SCREEN_BUFFER_INFO consoleInfo; - short old_attrs; -#endif - Logger() : Logger(std::cout, "unnamed") - { -#ifdef _WIN32 - // Attempt to use ANSI escapes directly - // if the modern console is active. - DWORD mode_flags; - - GetConsoleMode(fd1, &mode_flags); - // since release SDKs don't have ANSI escape support yet - // we get all or nothing: if we can't get it, then we wouldn't - // be able to get any of them individually - mode_flags |= 0x0004 | 0x0008; - BOOL t = SetConsoleMode(fd1, mode_flags); - if(!t) - this->isConsoleModern = false; // fall back to setting colours manually -#endif - } - - Logger(std::ostream& o, const std::string& name) : nodeName(name), out(o) - { - } - }; - - extern Logger _glog; - - void - SetLogLevel(LogLevel lvl); - - /** internal */ - template < typename TArg > - void - LogAppend(std::stringstream& ss, TArg&& arg) noexcept - { - ss << std::forward< TArg >(arg); - } - /** internal */ - template < typename TArg, typename... TArgs > - void - LogAppend(std::stringstream& ss, TArg&& arg, TArgs&&... args) noexcept - { - LogAppend(ss, std::forward< TArg >(arg)); - LogAppend(ss, std::forward< TArgs >(args)...); - } - - static inline std::string - thread_id_string() - { - auto tid = std::this_thread::get_id(); - std::hash< std::thread::id > h; - uint16_t id = h(tid) % 1000; -#if defined(ANDROID) || defined(RPI) - char buff[8] = {0}; - snprintf(buff, sizeof(buff), "%u", id); - return buff; -#else - return std::to_string(id); -#endif - } - - struct log_timestamp - { - const char* format; - - log_timestamp(const char* fmt = "%c %Z") : format(fmt) - { - } - - friend std::ostream& - operator<<(std::ostream& out, const log_timestamp& ts) - { -#if defined(ANDROID) || defined(RPI) - (void)ts; - return out << time_now_ms(); -#else - auto now = llarp::Clock_t::to_time_t(llarp::Clock_t::now()); - return out << std::put_time(std::localtime(&now), ts.format); -#endif - } - }; - - /** internal */ - template < typename... TArgs > - void - _Log(LogLevel lvl, const char* fname, int lineno, TArgs&&... args) noexcept - { - if(_glog.minlevel > lvl) - return; - - std::stringstream ss; -#ifdef ANDROID - int loglev = -1; - switch(lvl) - { - case eLogNone: - break; - case eLogDebug: - ss << "[DBG] "; - loglev = ANDROID_LOG_DEBUG; - break; - case eLogInfo: - ss << "[NFO] "; - loglev = ANDROID_LOG_INFO; - break; - case eLogWarn: - ss << "[WRN] "; - loglev = ANDROID_LOG_WARN; - break; - case eLogError: - ss << "[ERR] "; - loglev = ANDROID_LOG_ERROR; - break; - } -#else -#ifdef _WIN32 - if(_glog.isConsoleModern) - { -#endif - switch(lvl) - { - case eLogNone: - break; - case eLogDebug: - ss << (char)27 << "[0m"; - ss << "[DBG] "; - break; - case eLogInfo: - ss << (char)27 << "[1m"; - ss << "[NFO] "; - break; - case eLogWarn: - ss << (char)27 << "[1;33m"; - ss << "[WRN] "; - break; - case eLogError: - ss << (char)27 << "[1;31m"; - ss << "[ERR] "; - break; - } -#ifdef _WIN32 - } - else // legacy console - { - // these _should_ be low white on black - GetConsoleScreenBufferInfo(_glog.fd1, &_glog.consoleInfo); - _glog.old_attrs = _glog.consoleInfo.wAttributes; - switch(lvl) - { - case eLogNone: - break; - case eLogDebug: - SetConsoleTextAttribute(_glog.fd1, - FOREGROUND_RED | FOREGROUND_GREEN - | FOREGROUND_BLUE); // low white on black - ss << "[DBG] "; - break; - case eLogInfo: - SetConsoleTextAttribute( - _glog.fd1, - FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN - | FOREGROUND_BLUE); // high white on black - ss << "[NFO] "; - break; - case eLogWarn: - SetConsoleTextAttribute(_glog.fd1, - FOREGROUND_RED | FOREGROUND_GREEN - | FOREGROUND_INTENSITY); // bright yellow - ss << "[WRN] "; - break; - case eLogError: - SetConsoleTextAttribute( - _glog.fd1, FOREGROUND_RED | FOREGROUND_INTENSITY); // bright red - ss << "[ERR] "; - break; - } - } -#endif -#endif - std::string tag = fname; - ss << _glog.nodeName << " (" << thread_id_string() << ") " - << log_timestamp() << " " << tag << ":" << lineno; - ss << "\t"; - LogAppend(ss, std::forward< TArgs >(args)...); -#ifndef ANDROID -#ifdef _WIN32 - if(_glog.isConsoleModern) - { -#endif - ss << (char)27 << "[0;0m"; - _glog.out << ss.str() << std::endl; -#ifdef _WIN32 - } - else - { - _glog.out << ss.str() << std::endl; - SetConsoleTextAttribute( - _glog.fd1, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); - } - -#endif -#else - { - tag = "LOKINET|" + tag; - __android_log_write(loglev, tag.c_str(), ss.str().c_str()); - } -#endif - } -} // namespace llarp - -#define LogDebug(x, ...) \ - _Log(llarp::eLogDebug, LOG_TAG, __LINE__, x, ##__VA_ARGS__) -#define LogInfo(x, ...) \ - _Log(llarp::eLogInfo, LOG_TAG, __LINE__, x, ##__VA_ARGS__) -#define LogWarn(x, ...) \ - _Log(llarp::eLogWarn, LOG_TAG, __LINE__, x, ##__VA_ARGS__) -#define LogError(x, ...) \ - _Log(llarp::eLogError, LOG_TAG, __LINE__, x, ##__VA_ARGS__) -#define LogDebugTag(tag, x, ...) \ - _Log(llarp::eLogDebug, tag, __LINE__, x, ##__VA_ARGS__) -#define LogInfoTag(tag, x, ...) \ - _Log(llarp::eLogInfo, tag, __LINE__, x, ##__VA_ARGS__) -#define LogWarnTag(tag, x, ...) \ - _Log(llarp::eLogWarn, tag, __LINE__, x, ##__VA_ARGS__) -#define LogErrorTag(tag, x, ...) \ - _Log(llarp::eLogError, tag, __LINE__, x, ##__VA_ARGS__) - -#ifndef LOG_TAG -#define LOG_TAG "default" -#endif - -#endif diff --git a/libabyss/src/client.cpp b/libabyss/src/client.cpp index 2e9aede27..f1e9c3c29 100644 --- a/libabyss/src/client.cpp +++ b/libabyss/src/client.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include diff --git a/libabyss/src/server.cpp b/libabyss/src/server.cpp index 0ce53a4a5..ba5b5297a 100644 --- a/libabyss/src/server.cpp +++ b/libabyss/src/server.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include diff --git a/llarp/bencode.cpp b/llarp/bencode.cpp index a1e47fc0e..853405257 100644 --- a/llarp/bencode.cpp +++ b/llarp/bencode.cpp @@ -1,5 +1,5 @@ #include -#include +#include bool bencode_write_bytestring(llarp_buffer_t* buff, const void* data, size_t sz) diff --git a/llarp/dns.cpp b/llarp/dns.cpp index 67b3cfee0..b371efa77 100644 --- a/llarp/dns.cpp +++ b/llarp/dns.cpp @@ -1,6 +1,6 @@ #include #include // for llarp_handle_dnsd_recvfrom, dnsc -#include +#include void hexDump(const char *buffer, uint16_t size) diff --git a/llarp/dns/message.cpp b/llarp/dns/message.cpp index e7480b18b..33fe0b4ec 100644 --- a/llarp/dns/message.cpp +++ b/llarp/dns/message.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include namespace llarp { diff --git a/llarp/dns/question.cpp b/llarp/dns/question.cpp index 24c831f3e..d213e5dea 100644 --- a/llarp/dns/question.cpp +++ b/llarp/dns/question.cpp @@ -1,5 +1,5 @@ #include -#include +#include namespace llarp { diff --git a/llarp/dns/rr.cpp b/llarp/dns/rr.cpp index 4fd73d0f2..d6b0fd6e5 100644 --- a/llarp/dns/rr.cpp +++ b/llarp/dns/rr.cpp @@ -1,5 +1,5 @@ #include -#include +#include namespace llarp { diff --git a/llarp/dnsc.cpp b/llarp/dnsc.cpp index e77ecc1a8..d5451e35d 100644 --- a/llarp/dnsc.cpp +++ b/llarp/dnsc.cpp @@ -14,7 +14,7 @@ #include // for std::find_if #include // for llarp::Addr -#include +#include #include // sprintf #define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) diff --git a/llarp/linux/netns.cpp b/llarp/linux/netns.cpp index a60ee6d84..c79bcb3e5 100644 --- a/llarp/linux/netns.cpp +++ b/llarp/linux/netns.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #ifndef MS_REC #define MS_REC (16384) #endif diff --git a/llarp/logger.hpp b/llarp/logger.hpp index 20c5705ac..96c2415ea 100644 --- a/llarp/logger.hpp +++ b/llarp/logger.hpp @@ -1 +1,278 @@ -#include +#ifndef LLARP_LOGGER_HPP +#define LLARP_LOGGER_HPP +#include +#include +#include +#include +#include +#include +#include +#ifdef _WIN32 +#define VC_EXTRALEAN +#include +#endif +#ifdef ANDROID +#include +#endif +#ifdef RPI +#include +#endif + +namespace llarp +{ + // probably will need to move out of llarp namespace for c api + enum LogLevel + { + eLogDebug, + eLogInfo, + eLogWarn, + eLogError, + eLogNone + }; + + struct Logger + { + std::string nodeName; + LogLevel minlevel = eLogInfo; + std::ostream& out; + + std::function< void(const std::string&) > customLog; + + llarp::util::Mutex access; +#ifdef _WIN32 + bool isConsoleModern = + true; // qol fix so oldfag clients don't see ugly escapes + HANDLE fd1 = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO consoleInfo; + short old_attrs; +#endif + Logger() : Logger(std::cout, "unnamed") + { +#ifdef _WIN32 + // Attempt to use ANSI escapes directly + // if the modern console is active. + DWORD mode_flags; + + GetConsoleMode(fd1, &mode_flags); + // since release SDKs don't have ANSI escape support yet + // we get all or nothing: if we can't get it, then we wouldn't + // be able to get any of them individually + mode_flags |= 0x0004 | 0x0008; + BOOL t = SetConsoleMode(fd1, mode_flags); + if(!t) + this->isConsoleModern = false; // fall back to setting colours manually +#endif + } + + Logger(std::ostream& o, const std::string& name) : nodeName(name), out(o) + { + } + }; + + extern Logger _glog; + + void + SetLogLevel(LogLevel lvl); + + /** internal */ + template < typename TArg > + void + LogAppend(std::stringstream& ss, TArg&& arg) noexcept + { + ss << std::forward< TArg >(arg); + } + /** internal */ + template < typename TArg, typename... TArgs > + void + LogAppend(std::stringstream& ss, TArg&& arg, TArgs&&... args) noexcept + { + LogAppend(ss, std::forward< TArg >(arg)); + LogAppend(ss, std::forward< TArgs >(args)...); + } + + static inline std::string + thread_id_string() + { + auto tid = std::this_thread::get_id(); + std::hash< std::thread::id > h; + uint16_t id = h(tid) % 1000; +#if defined(ANDROID) || defined(RPI) + char buff[8] = {0}; + snprintf(buff, sizeof(buff), "%u", id); + return buff; +#else + return std::to_string(id); +#endif + } + + struct log_timestamp + { + const char* format; + + log_timestamp(const char* fmt = "%c %Z") : format(fmt) + { + } + + friend std::ostream& + operator<<(std::ostream& out, const log_timestamp& ts) + { +#if defined(ANDROID) || defined(RPI) + (void)ts; + return out << time_now_ms(); +#else + auto now = llarp::Clock_t::to_time_t(llarp::Clock_t::now()); + return out << std::put_time(std::localtime(&now), ts.format); +#endif + } + }; + + /** internal */ + template < typename... TArgs > + void + _Log(LogLevel lvl, const char* fname, int lineno, TArgs&&... args) noexcept + { + if(_glog.minlevel > lvl) + return; + + std::stringstream ss; +#ifdef ANDROID + int loglev = -1; + switch(lvl) + { + case eLogNone: + break; + case eLogDebug: + ss << "[DBG] "; + loglev = ANDROID_LOG_DEBUG; + break; + case eLogInfo: + ss << "[NFO] "; + loglev = ANDROID_LOG_INFO; + break; + case eLogWarn: + ss << "[WRN] "; + loglev = ANDROID_LOG_WARN; + break; + case eLogError: + ss << "[ERR] "; + loglev = ANDROID_LOG_ERROR; + break; + } +#else +#ifdef _WIN32 + if(_glog.isConsoleModern) + { +#endif + switch(lvl) + { + case eLogNone: + break; + case eLogDebug: + ss << (char)27 << "[0m"; + ss << "[DBG] "; + break; + case eLogInfo: + ss << (char)27 << "[1m"; + ss << "[NFO] "; + break; + case eLogWarn: + ss << (char)27 << "[1;33m"; + ss << "[WRN] "; + break; + case eLogError: + ss << (char)27 << "[1;31m"; + ss << "[ERR] "; + break; + } +#ifdef _WIN32 + } + else // legacy console + { + // these _should_ be low white on black + GetConsoleScreenBufferInfo(_glog.fd1, &_glog.consoleInfo); + _glog.old_attrs = _glog.consoleInfo.wAttributes; + switch(lvl) + { + case eLogNone: + break; + case eLogDebug: + SetConsoleTextAttribute(_glog.fd1, + FOREGROUND_RED | FOREGROUND_GREEN + | FOREGROUND_BLUE); // low white on black + ss << "[DBG] "; + break; + case eLogInfo: + SetConsoleTextAttribute( + _glog.fd1, + FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN + | FOREGROUND_BLUE); // high white on black + ss << "[NFO] "; + break; + case eLogWarn: + SetConsoleTextAttribute(_glog.fd1, + FOREGROUND_RED | FOREGROUND_GREEN + | FOREGROUND_INTENSITY); // bright yellow + ss << "[WRN] "; + break; + case eLogError: + SetConsoleTextAttribute( + _glog.fd1, FOREGROUND_RED | FOREGROUND_INTENSITY); // bright red + ss << "[ERR] "; + break; + } + } +#endif +#endif + std::string tag = fname; + ss << _glog.nodeName << " (" << thread_id_string() << ") " + << log_timestamp() << " " << tag << ":" << lineno; + ss << "\t"; + LogAppend(ss, std::forward< TArgs >(args)...); +#ifndef ANDROID +#ifdef _WIN32 + if(_glog.isConsoleModern) + { +#endif + ss << (char)27 << "[0;0m"; + _glog.out << ss.str() << std::endl; +#ifdef _WIN32 + } + else + { + _glog.out << ss.str() << std::endl; + SetConsoleTextAttribute( + _glog.fd1, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + } + +#endif +#else + { + tag = "LOKINET|" + tag; + __android_log_write(loglev, tag.c_str(), ss.str().c_str()); + } +#endif + } +} // namespace llarp + +#define LogDebug(x, ...) \ + _Log(llarp::eLogDebug, LOG_TAG, __LINE__, x, ##__VA_ARGS__) +#define LogInfo(x, ...) \ + _Log(llarp::eLogInfo, LOG_TAG, __LINE__, x, ##__VA_ARGS__) +#define LogWarn(x, ...) \ + _Log(llarp::eLogWarn, LOG_TAG, __LINE__, x, ##__VA_ARGS__) +#define LogError(x, ...) \ + _Log(llarp::eLogError, LOG_TAG, __LINE__, x, ##__VA_ARGS__) +#define LogDebugTag(tag, x, ...) \ + _Log(llarp::eLogDebug, tag, __LINE__, x, ##__VA_ARGS__) +#define LogInfoTag(tag, x, ...) \ + _Log(llarp::eLogInfo, tag, __LINE__, x, ##__VA_ARGS__) +#define LogWarnTag(tag, x, ...) \ + _Log(llarp::eLogWarn, tag, __LINE__, x, ##__VA_ARGS__) +#define LogErrorTag(tag, x, ...) \ + _Log(llarp::eLogError, tag, __LINE__, x, ##__VA_ARGS__) + +#ifndef LOG_TAG +#define LOG_TAG "default" +#endif + +#endif diff --git a/test/base32_unittest.cpp b/test/base32_unittest.cpp index 9838649df..e1bf30675 100644 --- a/test/base32_unittest.cpp +++ b/test/base32_unittest.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include struct Base32Test : public ::testing::Test { diff --git a/vendor/libtuntap-master/tuntap.cpp b/vendor/libtuntap-master/tuntap.cpp index 143c67c9d..8eae9277e 100644 --- a/vendor/libtuntap-master/tuntap.cpp +++ b/vendor/libtuntap-master/tuntap.cpp @@ -50,7 +50,7 @@ inet_ntop(int af, const void *src, char *dst, size_t size); #include -#include +#include #include "tuntap.h" diff --git a/vendor/libtuntap-master/tuntap_log.cpp b/vendor/libtuntap-master/tuntap_log.cpp index 648dfe213..418291354 100644 --- a/vendor/libtuntap-master/tuntap_log.cpp +++ b/vendor/libtuntap-master/tuntap_log.cpp @@ -23,7 +23,7 @@ #include #include -#include +#include #include "tuntap.h" extern "C"