| 54 | } |
| 55 | |
| 56 | Logger* Logger::getInstance(const QString& name, Logger::LogLevel minLevel) |
| 57 | { |
| 58 | QMutexLocker lock(&_mapLock); |
| 59 | |
| 60 | Logger* log = _loggerMap.value(name, nullptr); |
| 61 | if (log == nullptr) |
| 62 | { |
| 63 | log = new Logger(name, minLevel); |
| 64 | _loggerMap.insert(name, log); |
| 65 | |
| 66 | if (_loggerMap.size() == 1) |
| 67 | { |
| 68 | // detect if we can output colorized logs |
| 69 | #ifdef _WIN32 |
| 70 | consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); |
| 71 | _hasConsole = (consoleHandle != nullptr); |
| 72 | #else |
| 73 | _hasConsole = isatty(fileno(stdin)); |
| 74 | #endif |
| 75 | |
| 76 | T_LOG_MESSAGE t; |
| 77 | t.utime = QDateTime::currentDateTime().toMSecsSinceEpoch(); |
| 78 | t.loggerName = name; |
| 79 | t.level = LogLevel::INFO; |
| 80 | t.levelString = LogLevelStrings[t.level]; |
| 81 | t.message = (_hasConsole) ? "TTY is attached to the log output" : "TTY is not attached to the log output"; |
| 82 | LoggerManager::getInstance()->handleNewLogMessage(t); |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | return log; |
| 87 | } |
| 88 | |
| 89 | void Logger::deleteInstance(const QString& name) |
| 90 | { |
nothing calls this directly
no test coverage detected