Line data Source code
1 : #include "kiss/logger.h" 2 : 3 : #include <stdlib.h> 4 : #include <iostream> 5 : 6 : namespace kiss { 7 : 8 : std::ostream *Logger::stream = &std::cerr; 9 : eLogLevel Logger::level = LOG_LEVEL_WARNING; 10 : const char* sLoggerLevel[] = { " ERROR ", "WARNING", " INFO ", " DEBUG " }; 11 : 12 : class EnvLogger { 13 : public: 14 : EnvLogger() { 15 : Logger::loadEnvLogLevel(); 16 : } 17 : }; 18 : static EnvLogger _env_log_; 19 : 20 12 : Logger::Logger(eLogLevel level) { 21 : time_t rawtime; 22 : struct tm * timeinfo; 23 : char buffer[80]; 24 : 25 12 : time(&rawtime); 26 12 : timeinfo = localtime(&rawtime); 27 : 28 12 : strftime(buffer, 80, "%Y-%m-%d %H:%M:%S ", timeinfo); 29 12 : *stream << buffer; 30 12 : *stream << "[" << sLoggerLevel[level] << "] "; 31 12 : } 32 : 33 12 : Logger::~Logger() { 34 12 : *stream << std::endl; 35 12 : } 36 : 37 26 : std::ostream &Logger::getLogStream() { 38 26 : return (*stream); 39 : } 40 : 41 0 : void Logger::setLogStream(std::ostream *s) { 42 0 : stream = s; 43 0 : } 44 : 45 0 : void Logger::setLogStream(std::ostream &s) { 46 0 : stream = &s; 47 0 : } 48 : 49 0 : void Logger::setLogLevel(eLogLevel l) { 50 0 : level = l; 51 0 : } 52 306 : eLogLevel Logger::getLogLevel() { 53 306 : return (level); 54 : } 55 : 56 : 57 : 58 : 59 19 : void Logger::loadEnvLogLevel() { 60 19 : if (::getenv("KISS_LOG_LEVEL")) { 61 : 62 0 : int level = atoi(::getenv("KISS_LOG_LEVEL")); 63 0 : switch (level) { 64 0 : case LOG_LEVEL_ERROR: 65 0 : Logger::setLogLevel(LOG_LEVEL_ERROR); 66 0 : break; 67 0 : case LOG_LEVEL_WARNING: 68 0 : Logger::setLogLevel(LOG_LEVEL_WARNING); 69 0 : break; 70 0 : case LOG_LEVEL_INFO: 71 0 : Logger::setLogLevel(LOG_LEVEL_INFO); 72 0 : break; 73 0 : case LOG_LEVEL_DEBUG: 74 0 : Logger::setLogLevel(LOG_LEVEL_DEBUG); 75 0 : break; 76 : default: 77 : std::cerr << "kiss::Logger: unknown log level in KISS_LOG_LEVEL '" 78 0 : << level << " values from 0-3 expected." << std::endl; 79 : break; 80 : } 81 : } 82 19 : } 83 : 84 : } // namespace kiss 85 :