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 54 : Logger::Logger(eLogLevel level) {
21 : time_t rawtime;
22 : struct tm * timeinfo;
23 : char buffer[80];
24 :
25 54 : time(&rawtime);
26 54 : timeinfo = localtime(&rawtime);
27 :
28 54 : strftime(buffer, 80, "%Y-%m-%d %H:%M:%S ", timeinfo);
29 54 : *stream << buffer;
30 54 : *stream << "[" << sLoggerLevel[level] << "] ";
31 54 : }
32 :
33 54 : Logger::~Logger() {
34 54 : *stream << std::endl;
35 54 : }
36 :
37 110 : std::ostream &Logger::getLogStream() {
38 110 : 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 302 : eLogLevel Logger::getLogLevel() {
53 302 : return (level);
54 : }
55 :
56 :
57 :
58 :
59 18 : void Logger::loadEnvLogLevel() {
60 18 : 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 18 : }
83 :
84 : } // namespace kiss
85 :
|