1#ifndef UPnPsdk_SYNCLOG_HPP
2#define UPnPsdk_SYNCLOG_HPP
11#include <cmake_vars.hpp>
30 #define SYNC(s) std::osyncstream((s))
36#ifdef UPnPsdk_WITH_TRACE
37 #define TRACE(s) SYNC(std::cerr)<<"TRACE["<<(static_cast<const char*>(__FILE__) + CMAKE_SOURCE_PATH_LENGTH)<<":"<<__LINE__<<"] "<<(s)<<"\n";
38 #define TRACE2(a, b) SYNC(std::cerr)<<"TRACE["<<(static_cast<const char*>(__FILE__) + CMAKE_SOURCE_PATH_LENGTH)<<":"<<__LINE__<<"] "<<(a)<<(b)<<"\n";
50#if defined(_MSC_VER) || defined(__APPLE__)
51#define __func__ __FUNCTION__
52#define PTHREAD_SELF UPnPsdk::pthread_self()
55#define PTHREAD_SELF ::pthread_self()
60#define UPnPsdk_LOGEXCEPT(m) "UPnPsdk "+std::string(m)+" EXCEPT[#"+std::to_string(PTHREAD_SELF)+" "+::std::string(__func__)+"()] "
61#define UPnPsdk_LOGWHAT "UPnPsdk ["+::std::string(__func__)+"] WHAT "
64inline constexpr int log_fileno{2};
65#define UPnPsdk_LOG(m) SYNC(std::cerr)<<"UPnPsdk "<<(m)
68#define UPnPsdk_LOGCRIT(m) UPnPsdk_LOG(m)<<" CRIT [#"<<PTHREAD_SELF<<" "<<__func__<<"()] "
70#define UPnPsdk_LOGERR(m) if(UPnPsdk::g_dbug) UPnPsdk_LOG(m)<<" ERROR [#"<<PTHREAD_SELF<<" "<<__func__<<"()] "
71#define UPnPsdk_LOGCATCH(m) if(UPnPsdk::g_dbug) UPnPsdk_LOG(m)<<" CATCH [#"<<PTHREAD_SELF<<" "<<__func__<<"()] "
72#define UPnPsdk_LOGINFO(m) if(UPnPsdk::g_dbug) UPnPsdk_LOG(m)<<" INFO [#"<<PTHREAD_SELF<<" "<<__func__<<"()] "
Global used constants and variables.
Reengineered Object Oriented UPnP+ program code.
Additional functions to manage Posix threads with C++ to be portable.