Commit 106664ec4a3cead9d4ef9eaf9b6c247bf7d6e41b

Authored by Peter M. Groen
1 parent aa0bd60b

Setting up the logger

Showing 2 changed files with 65 additions and 2 deletions
include/log.h
1 1 #pragma once
2 2  
3 3 // std
  4 +#include <mutex>
4 5 #include <syslog.h>
5   -#include <unistd.h>
6 6 #include <string>
  7 +#include <unistd.h>
7 8  
8 9 namespace osdev {
9 10 namespace components {
... ... @@ -213,6 +214,9 @@ private:
213 214  
214 215 //! The amount of logging
215 216 static LogLevel s_logLevel;
  217 +
  218 + //! Mutex to keep the logger thread-safe
  219 + static std::mutex m_mutex;
216 220 };
217 221  
218 222 } /* End namespace mqtt */
... ...
src/log.cpp
1 1 #include "log.h"
2   -
3 2 #include "threadcontext.h"
4 3  
5 4 // std
6 5 #include <ios>
7 6 #include <iomanip>
  7 +#include <lockguard.h>
8 8 #include <sstream>
9 9 #include <syslog.h>
10 10 #include <sys/types.h>
... ... @@ -60,6 +60,8 @@ void Log::terminate()
60 60  
61 61 void Log::log( const std::string &category, const std::string &message, LogLevel level )
62 62 {
  63 + std::lock_guard<std::mutex> lock(m_mutex);
  64 +
63 65 std::string logCategory = s_context + '|' + toString( level ) + '|' + ThreadContext::instance().context() + '|' + category;
64 66 std::string logMessage = message;
65 67 if( logMessage.empty() )
... ... @@ -76,6 +78,13 @@ void Log::log( const std::string &amp;category, const std::string &amp;message, LogLevel
76 78 writeLog( logCategory, logMessage, level );
77 79 }
78 80  
  81 +std::string Log::fileinfoMessage( const char *file, int line, const std::string &message )
  82 +{
  83 + static const std::string templ("%1:%2| %3");
  84 + QFileInfo fi(file);
  85 + return templ.arg( fi.fileName() ).arg(line).arg(message);
  86 +}
  87 +
79 88 void Log::writeLog(const std::string &category, const std::string &message, LogLevel level)
80 89 {
81 90 if( s_fileName.empty() )
... ... @@ -95,6 +104,56 @@ void Log::writeLog(const std::string &amp;category, const std::string &amp;message, LogL
95 104 }
96 105 }
97 106  
  107 +void Log::trace(const std::string &category, const std::string &message)
  108 +{
  109 + log(category, message, LogLevel::Trace);
  110 +}
  111 +
  112 +void Log::debug(const std::string& category, const std::string& message)
  113 +{
  114 + log( category, message, LogLevel::Debug );
  115 +}
  116 +
  117 +void Log::info(const std::string& category, const std::string& message)
  118 +{
  119 + log( category, message, LogLevel::Info );
  120 +}
  121 +
  122 +void Log::warning(const std::string& category, const std::string& message)
  123 +{
  124 + log(category, message, LogLevel::Warning );
  125 +}
  126 +
  127 +void Log::error(const std::string& category, const std::string& message)
  128 +{
  129 + log(category, message, LogLevel::Error );
  130 +}
  131 +
  132 +void Log::trace(const char *file, int line, const std::string &category, const std::string &message)
  133 +{
  134 + log(category, fileinfoMessage(file, line, message), LogLevel::Trace );
  135 +}
  136 +
  137 +void Log::debug(const char* file, int line, const std::string& category, const std::string& message)
  138 +{
  139 + log( category, fileinfoMessage(file, line, message), LogLevel::Debug );
  140 +}
  141 +
  142 +void Log::info(const char* file, int line, const std::string& category, const std::string& message)
  143 +{
  144 + log( category, fileinfoMessage(file, line, message), LogLevel::Info );
  145 +}
  146 +
  147 +void Log::warning(const char* file, int line, const std::string& category, const std::string& message)
  148 +{
  149 + log( category, fileinfoMessage(file, line, message), LogLevel::Warning);
  150 +}
  151 +
  152 +void Log::error(const char* file, int line, const std::string& category, const std::string& message)
  153 +{
  154 + log( category, fileinfoMessage(file, line, message), LogLevel::Error );
  155 +}
  156 +
98 157 void Log::ReplaceAll( std::string &strToReplace,
99 158 const std::string& from_chars,
100 159 const std::string& to_chars )
... ...