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 #pragma once 1 #pragma once
2 2
3 // std 3 // std
  4 +#include <mutex>
4 #include <syslog.h> 5 #include <syslog.h>
5 -#include <unistd.h>  
6 #include <string> 6 #include <string>
  7 +#include <unistd.h>
7 8
8 namespace osdev { 9 namespace osdev {
9 namespace components { 10 namespace components {
@@ -213,6 +214,9 @@ private: @@ -213,6 +214,9 @@ private:
213 214
214 //! The amount of logging 215 //! The amount of logging
215 static LogLevel s_logLevel; 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 } /* End namespace mqtt */ 222 } /* End namespace mqtt */
src/log.cpp
1 #include "log.h" 1 #include "log.h"
2 -  
3 #include "threadcontext.h" 2 #include "threadcontext.h"
4 3
5 // std 4 // std
6 #include <ios> 5 #include <ios>
7 #include <iomanip> 6 #include <iomanip>
  7 +#include <lockguard.h>
8 #include <sstream> 8 #include <sstream>
9 #include <syslog.h> 9 #include <syslog.h>
10 #include <sys/types.h> 10 #include <sys/types.h>
@@ -60,6 +60,8 @@ void Log::terminate() @@ -60,6 +60,8 @@ void Log::terminate()
60 60
61 void Log::log( const std::string &category, const std::string &message, LogLevel level ) 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 std::string logCategory = s_context + '|' + toString( level ) + '|' + ThreadContext::instance().context() + '|' + category; 65 std::string logCategory = s_context + '|' + toString( level ) + '|' + ThreadContext::instance().context() + '|' + category;
64 std::string logMessage = message; 66 std::string logMessage = message;
65 if( logMessage.empty() ) 67 if( logMessage.empty() )
@@ -76,6 +78,13 @@ void Log::log( const std::string &amp;category, const std::string &amp;message, LogLevel @@ -76,6 +78,13 @@ void Log::log( const std::string &amp;category, const std::string &amp;message, LogLevel
76 writeLog( logCategory, logMessage, level ); 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 void Log::writeLog(const std::string &category, const std::string &message, LogLevel level) 88 void Log::writeLog(const std::string &category, const std::string &message, LogLevel level)
80 { 89 {
81 if( s_fileName.empty() ) 90 if( s_fileName.empty() )
@@ -95,6 +104,56 @@ void Log::writeLog(const std::string &amp;category, const std::string &amp;message, LogL @@ -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 void Log::ReplaceAll( std::string &strToReplace, 157 void Log::ReplaceAll( std::string &strToReplace,
99 const std::string& from_chars, 158 const std::string& from_chars,
100 const std::string& to_chars ) 159 const std::string& to_chars )