libminifi/src/core/logging/Logger.cpp (97 lines of code) (raw):
/**
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "core/logging/Logger.h"
#include <mutex>
#include <memory>
#include <sstream>
#include <iostream>
namespace org::apache::nifi::minifi::core::logging {
LoggerControl::LoggerControl()
    : is_enabled_(true) {
}
bool LoggerControl::is_enabled() const {
  return is_enabled_;
}
void LoggerControl::setEnabled(bool status) {
  is_enabled_ = status;
}
BaseLogger::~BaseLogger() = default;
bool BaseLogger::should_log(const LOG_LEVEL& /*level*/) {
  return true;
}
LogBuilder::LogBuilder(BaseLogger *l, LOG_LEVEL level)
    : ignore(false),
      ptr(l),
      level(level) {
  if (!l->should_log(level)) {
    setIgnore();
  }
}
LogBuilder::~LogBuilder() {
  if (!ignore)
    log_string(level);
}
void LogBuilder::setIgnore() {
  ignore = true;
}
void LogBuilder::log_string(LOG_LEVEL level) const {
  ptr->log_string(level, str.str());
}
bool Logger::should_log(const LOG_LEVEL &level) {
  if (controller_ && !controller_->is_enabled())
    return false;
  spdlog::level::level_enum logger_level = spdlog::level::level_enum::info;
  switch (level) {
    case critical:
      logger_level = spdlog::level::level_enum::critical;
      break;
    case err:
      logger_level = spdlog::level::level_enum::err;
      break;
    case info:
      break;
    case debug:
      logger_level = spdlog::level::level_enum::debug;
      break;
    case off:
      logger_level = spdlog::level::level_enum::off;
      break;
    case trace:
      logger_level = spdlog::level::level_enum::trace;
      break;
    case warn:
      logger_level = spdlog::level::level_enum::warn;
      break;
  }
  std::lock_guard<std::mutex> lock(mutex_);
  return delegate_->should_log(logger_level);
}
void Logger::log_string(LOG_LEVEL level, std::string str) {
  switch (level) {
    case critical:
      log_warn(str.c_str());
      break;
    case err:
      log_error(str.c_str());
      break;
    case info:
      log_info(str.c_str());
      break;
    case debug:
      log_debug(str.c_str());
      break;
    case trace:
      log_trace(str.c_str());
      break;
    case warn:
      log_warn(str.c_str());
      break;
    case off:
      break;
  }
}
Logger::Logger(std::shared_ptr<spdlog::logger> delegate, std::shared_ptr<LoggerControl> controller)
    : delegate_(std::move(delegate)), controller_(std::move(controller)) {
}
Logger::Logger(std::shared_ptr<spdlog::logger> delegate)
    : delegate_(std::move(delegate)), controller_(nullptr) {
}
}  // namespace org::apache::nifi::minifi::core::logging