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