Добавил возможность логирования в файл

This commit is contained in:
selim 2014-09-14 10:05:10 +04:00
parent f6a6737b99
commit 9111a93ec7
3 changed files with 45 additions and 29 deletions

View File

@ -4,26 +4,31 @@
#include "log_queue.h" #include "log_queue.h"
#include <sstream> #include <sstream>
#include <fstream>
#include <stdexcept> #include <stdexcept>
#include <iostream> #include <iostream>
#include <atomic> #include <atomic>
#include <functional> #include <functional>
#include <ctime> #include <ctime>
enum class log_type
{
std_output,
file
};
class logger class logger
{ {
private: private:
std::atomic<bool> _enabled; std::atomic<bool> _enabled;
std::stringstream _logLine; std::stringstream _logLine;
std::ofstream _outFile;
log_queue _queue; log_queue _queue;
log_type _type;
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: public:
logger(); logger();
logger(std::string path);
void set_enabled(bool enabled); void set_enabled(bool enabled);
@ -48,12 +53,10 @@ private:
{ {
if (_enabled) if (_enabled)
{ {
_queue.add_log(std::bind(&logger::log_impl<Args...>, this, s, args..., sys_clock::now(), hr_clock::now(), log_level)); auto hrc = std::chrono::high_resolution_clock::now();
} auto sc = std::chrono::system_clock::now();
}
template<typename... Args> void log_impl(const char* s, const Args&... args, sys_tp sc, hr_tp hrc, const char* log_level) _queue.add_log([this, s, args..., sc, hrc, log_level]{
{
_logLine.str(""); _logLine.str("");
//_logLine << "[" << hrc.time_since_epoch().count() << "] "; //_logLine << "[" << hrc.time_since_epoch().count() << "] ";
@ -66,7 +69,17 @@ private:
form_log_line(s, args...); form_log_line(s, args...);
switch(_type)
{
case log_type::std_output:
std::cout << _logLine.str() << std::endl; std::cout << _logLine.str() << std::endl;
break;
case log_type::file:
_outFile << _logLine.str() << std::endl;
break;
}
});
}
} }
void form_log_line(const char* s); void form_log_line(const char* s);

View File

@ -4,7 +4,11 @@
logger ulog; logger ulog;
logger::logger(): _enabled(true) logger::logger(): _enabled(true), _type(log_type::std_output)
{
}
logger::logger(std::string path): _enabled(true), _outFile(path), _type(log_type::file)
{ {
} }

View File

@ -561,6 +561,8 @@ TEST(Ustring, replace_string)
EXPECT_TRUE(str2 == "33 hello 33 world 33 more 33 and 33 more 33"); EXPECT_TRUE(str2 == "33 hello 33 world 33 more 33 and 33 more 33");
} }
//logger flog("test.log");
void func(std::size_t n) void func(std::size_t n)
{ {
for(std::size_t j = 0; j < 100; ++j) for(std::size_t j = 0; j < 100; ++j)
@ -595,8 +597,5 @@ int main(int argc, char **argv)
for(std::size_t i = 0; i < threadsCount; ++i) for(std::size_t i = 0; i < threadsCount; ++i)
threads[i].join(); threads[i].join();
int n = 0;
std::cin >> n;
return 0; return 0;
} }