82 lines
1.5 KiB
C++
82 lines
1.5 KiB
C++
|
#include "logger.h"
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <iostream>
|
||
|
|
||
|
namespace kiss {
|
||
|
|
||
|
std::ostream *Logger::stream = &std::cerr;
|
||
|
eLogLevel Logger::level = LOG_LEVEL_WARNING;
|
||
|
const char* sLoggerLevel[] = { "ERROR ", "WARNING", "INFO ", "DEBUG " };
|
||
|
|
||
|
class EnvLogger {
|
||
|
public:
|
||
|
EnvLogger() {
|
||
|
Logger::loadEnvLogLevel();
|
||
|
}
|
||
|
};
|
||
|
static EnvLogger _env_log_;
|
||
|
|
||
|
Logger::Logger(eLogLevel level) {
|
||
|
time_t rawtime;
|
||
|
struct tm * timeinfo;
|
||
|
char buffer[80];
|
||
|
|
||
|
time(&rawtime);
|
||
|
timeinfo = localtime(&rawtime);
|
||
|
|
||
|
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S ", timeinfo);
|
||
|
*stream << buffer;
|
||
|
*stream << "[" << sLoggerLevel[level] << "] ";
|
||
|
}
|
||
|
|
||
|
Logger::~Logger() {
|
||
|
*stream << std::endl;
|
||
|
}
|
||
|
|
||
|
std::ostream &Logger::getLogStream() {
|
||
|
return (*stream);
|
||
|
}
|
||
|
|
||
|
void Logger::setLogStream(std::ostream *s) {
|
||
|
stream = s;
|
||
|
}
|
||
|
|
||
|
void Logger::setLogStream(std::ostream &s) {
|
||
|
stream = &s;
|
||
|
}
|
||
|
|
||
|
void Logger::setLogLevel(eLogLevel l) {
|
||
|
level = l;
|
||
|
}
|
||
|
eLogLevel Logger::getLogLevel() {
|
||
|
return (level);
|
||
|
}
|
||
|
|
||
|
void Logger::loadEnvLogLevel() {
|
||
|
if (::getenv("LOG_LEVEL")) {
|
||
|
int level = atoi(::getenv("LOG_LEVEL"));
|
||
|
switch (level) {
|
||
|
case LOG_LEVEL_ERROR:
|
||
|
Logger::setLogLevel(LOG_LEVEL_ERROR);
|
||
|
break;
|
||
|
case LOG_LEVEL_WARNING:
|
||
|
Logger::setLogLevel(LOG_LEVEL_WARNING);
|
||
|
break;
|
||
|
case LOG_LEVEL_INFO:
|
||
|
Logger::setLogLevel(LOG_LEVEL_INFO);
|
||
|
break;
|
||
|
case LOG_LEVEL_DEBUG:
|
||
|
Logger::setLogLevel(LOG_LEVEL_DEBUG);
|
||
|
break;
|
||
|
default:
|
||
|
std::cerr << "kiss::Logger: unknown log level in LOG_LEVEL '"
|
||
|
<< level << " values from 0-3 expected." << std::endl;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} // namespace kiss
|
||
|
|