From 973d32f4841e7f1ad473d9f036f4ce2247d3b414 Mon Sep 17 00:00:00 2001 From: selim Date: Thu, 11 Sep 2014 08:14:27 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=20=D0=B8=20log=5Flevel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/logger.h | 65 +++++++++++++++++++------- msvc/cpputil_test/cpputil_test.vcxproj | 4 +- src/logger.cpp | 5 +- 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/include/logger.h b/include/logger.h index ea5a7c8..e406137 100644 --- a/include/logger.h +++ b/include/logger.h @@ -8,6 +8,7 @@ #include #include #include +#include class logger { @@ -16,40 +17,68 @@ private: std::stringstream _logLine; log_queue _queue; + typedef std::chrono::high_resolution_clock hr_clock; + typedef std::chrono::system_clock sys_clock; + typedef std::chrono::system_clock::time_point sys_tp; + typedef std::chrono::high_resolution_clock::time_point hr_tp; + public: logger(); void set_enabled(bool enabled); - - template void log(const char* s, const Args&... args) - { - //const long time = std::chrono::high_resolution_clock::now().time_since_epoch().count(); - - if(_enabled) - { - const std::function& func = std::bind(&logger::log_impl, this, s, args...); - _queue.add_log(func); - } - } + + template void log_info(const char* s, const Args&... args) + { + log("info", s, args...); + } + + template void log_warning(const char* s, const Args&... args) + { + log("warning", s, args...); + } + + template void log_error(const char* s, const Args&... args) + { + log("error", s, args...); + } private: - - template void log_impl(const char* s, const Args&... args) + + template void log(const char* log_level, const char* s, const Args&... args) { - _logLine.str(""); - log_internal(s, args...); + if (_enabled) + { + _queue.add_log(std::bind(&logger::log_impl, this, s, args..., sys_clock::now(), hr_clock::now(), log_level)); + } } - void log_internal(const char* s); + template void log_impl(const char* s, const Args&... args, sys_tp sc, hr_tp hrc, const char* log_level) + { + _logLine.str(""); + //_logLine << "[" << hrc.time_since_epoch().count() << "] "; - template void log_internal(const char* s, const T& value, const Args&... args) + char tm_buffer[50]; + std::time_t tm = std::chrono::system_clock::to_time_t(sc); + std::strftime(tm_buffer, 50, "%F %T", std::localtime(&tm)); + _logLine << "[" << tm_buffer << "] "; + + _logLine << "[" << log_level << "] "; + + form_log_line(s, args...); + + std::cout << _logLine.str() << std::endl; + } + + void form_log_line(const char* s); + + template void form_log_line(const char* s, const T& value, const Args&... args) { while (*s) { if (*s == '%' && *++s != '%') { _logLine << value; - return log_internal(s, args...); + return form_log_line(s, args...); } _logLine << *s++; } diff --git a/msvc/cpputil_test/cpputil_test.vcxproj b/msvc/cpputil_test/cpputil_test.vcxproj index f4ff98b..0acde23 100644 --- a/msvc/cpputil_test/cpputil_test.vcxproj +++ b/msvc/cpputil_test/cpputil_test.vcxproj @@ -51,7 +51,7 @@ Level3 Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)\gtest\include;$(SolutionDir)\..\include;%(AdditionalIncludeDirectories) @@ -69,7 +69,7 @@ MaxSpeed true true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) $(SolutionDir)\gtest\include;$(SolutionDir)\..\include;%(AdditionalIncludeDirectories) diff --git a/src/logger.cpp b/src/logger.cpp index 22085e9..3b45abd 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -13,7 +13,7 @@ void logger::set_enabled(bool enabled) _enabled = enabled; } -void logger::log_internal(const char *s) +void logger::form_log_line(const char *s) { while (*s) { @@ -21,8 +21,5 @@ void logger::log_internal(const char *s) throw std::runtime_error("invalid format string: missing arguments"); _logLine << *s++; } - - // actually logging - std::cout << _logLine.str() << std::endl; }