Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
Logger.h
1#pragma once
2#include "stdafx.h"
3#include <string>
4#include <boost/shared_ptr.hpp>
5#include <thread>
6#include <mutex>
7#include "ThreadSafeQue.h"
8#include <boost/log/sources/severity_logger.hpp>
9#include <boost/log/trivial.hpp>
10#include <boost/log/sinks/text_file_backend.hpp>
11#include <boost/log/utility/setup/file.hpp>
12#include <boost/date_time/posix_time/posix_time.hpp>
13#include <boost/log/core.hpp>
14#include <boost/log/expressions.hpp>
15#include <boost/log/utility/setup/common_attributes.hpp>
16#include <boost/log/sources/record_ostream.hpp>
17#include <boost/log/utility/setup/console.hpp>
18
19
20/*
21Module level control of logs is a todo
22*/
23
25{
26public:
28 {
29 enableConsoleLog = true;
30 enableFileLog = false;
31 fileLogPath = "";
32 logLevel = boost::log::trivial::severity_level::error;
33 }
34
37 std::string fileLogPath;
38 boost::log::trivial::severity_level logLevel;
39 int fps;
40};
41
42/*
43Todos:
44Module Name should be printed
45Per Module log level should be enabled
46Separate loglevel for file and console log
47*/
48
49class Logger {
50public:
51 static void initLogger(LoggerProps props);
52 static Logger* getLogger();
53 static void setLogLevel(boost::log::trivial::severity_level severity);
54 static bool setLogLevel(const std::string& sSeverity);
55 static void setListener(void(*cb)(const std::string&));
56
57 virtual ~Logger();
58
59 void _setLogLevel(boost::log::trivial::severity_level severity);
60 void setConsoleLog(bool enableLog);
61 void setFileLog(bool enableLog);
62 bool push(boost::log::trivial::severity_level level, std::ostringstream& stream);
63
64 void _setListener(void(*cb)(const std::string&));
65
66 std::ostringstream& pre(std::ostringstream& stream, boost::log::trivial::severity_level lvl);
67 std::ostringstream& aipexceptionPre(std::ostringstream& stream, boost::log::trivial::severity_level lvl,int type);
68
69 void operator()(); //to support std::thread
70private:
71 Logger(LoggerProps props);
72 void initBoostLogger(LoggerProps props);
73
74 static std::mutex logger_mutex;
76 std::thread myThread;
77 bool run();
78 bool process(const std::string& message);
81
82 void(*mListener)(const std::string&) = nullptr;
83
84 static boost::shared_ptr<Logger> instance;
85 boost::log::sources::severity_logger< boost::log::trivial::severity_level > lg;
86 boost::shared_ptr< boost::log::sinks::synchronous_sink< boost::log::sinks::text_ostream_backend > > mConsoleSink;
87 boost::shared_ptr< boost::log::sinks::synchronous_sink< boost::log::sinks::text_file_backend > > mFileSink;
88};
89
90#define A_LOG_SEV(severity) for(std::ostringstream stream; Logger::getLogger()->push(severity, stream);) Logger::getLogger()->pre(stream, severity)
91#define A_LOG(severity) A_LOG_SEV(severity) << __FILE__ << ":" << __LINE__ << ":"
92
93#define LOG_TRACE A_LOG(boost::log::trivial::severity_level::trace)
94#define LOG_DEBUG A_LOG(boost::log::trivial::severity_level::debug)
95#define LOG_INFO A_LOG(boost::log::trivial::severity_level::info)
96#define LOG_WARNING A_LOG(boost::log::trivial::severity_level::warning)
97#define LOG_ERROR A_LOG(boost::log::trivial::severity_level::error)
98#define LOG_FATAL A_LOG(boost::log::trivial::severity_level::fatal)
Definition Logger.h:25
LoggerProps()
Definition Logger.h:27
bool enableConsoleLog
Definition Logger.h:35
int fps
Definition Logger.h:39
boost::log::trivial::severity_level logLevel
Definition Logger.h:38
std::string fileLogPath
Definition Logger.h:37
bool enableFileLog
Definition Logger.h:36
Definition Logger.h:49
void operator()()
Definition Logger.cpp:163
bool mRunning
Definition Logger.h:79
void setConsoleLog(bool enableLog)
Definition Logger.cpp:149
boost::log::sources::severity_logger< boost::log::trivial::severity_level > lg
Definition Logger.h:85
threadsafe_que< std::string > mQue
Definition Logger.h:75
Logger(LoggerProps props)
Definition Logger.cpp:28
void(* mListener)(const std::string &)
Definition Logger.h:82
bool push(boost::log::trivial::severity_level level, std::ostringstream &stream)
Definition Logger.cpp:221
std::thread myThread
Definition Logger.h:76
void _setLogLevel(boost::log::trivial::severity_level severity)
Definition Logger.cpp:144
LoggerProps mProps
Definition Logger.h:80
boost::shared_ptr< boost::log::sinks::synchronous_sink< boost::log::sinks::text_file_backend > > mFileSink
Definition Logger.h:87
void _setListener(void(*cb)(const std::string &))
Definition Logger.cpp:119
static void setListener(void(*cb)(const std::string &))
Definition Logger.cpp:113
static void setLogLevel(boost::log::trivial::severity_level severity)
Definition Logger.cpp:138
void setFileLog(bool enableLog)
Definition Logger.cpp:154
std::ostringstream & aipexceptionPre(std::ostringstream &stream, boost::log::trivial::severity_level lvl, int type)
Definition Logger.cpp:263
std::ostringstream & pre(std::ostringstream &stream, boost::log::trivial::severity_level lvl)
Definition Logger.cpp:253
bool process(const std::string &message)
Definition Logger.cpp:195
static Logger * getLogger()
Definition Logger.cpp:17
void initBoostLogger(LoggerProps props)
Definition Logger.cpp:42
boost::shared_ptr< boost::log::sinks::synchronous_sink< boost::log::sinks::text_ostream_backend > > mConsoleSink
Definition Logger.h:86
static boost::shared_ptr< Logger > instance
Definition Logger.h:84
virtual ~Logger()
Definition Logger.cpp:81
static void initLogger(LoggerProps props)
Definition Logger.cpp:6
bool run()
Definition Logger.cpp:168
static std::mutex logger_mutex
Definition Logger.h:74
Definition ThreadSafeQue.h:8