Добавил возможность логирования в файл
This commit is contained in:
parent
f6a6737b99
commit
9111a93ec7
@ -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);
|
||||||
|
|||||||
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user