// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "arc/keymaster/keymaster_logger.h"

#include <string.h>
#include <string>

#include <base/logging.h>
#include <base/strings/stringprintf.h>

namespace arc {
namespace keymaster {

namespace {

constexpr char kLogTag[] = "ArcKeymaster ";

// Removes the file path from a given log message.
//
// Messages coming from the keymaster logger may include a file path, which is
// verbose and not very relevant. This method trims it out from the message to
// avoid the redundancy.
//
// More specifically, incoming messages have the following format:
//   </full/path/to/caller.cpp>, Line <number>: <actual log message>
//
// And this function trims it as follows:
//   <caller.cpp>, Line <number>: <actual log message>
const char* TrimFilePath(const char* logMessage) {
  const char* file_name_start = std::strrchr(logMessage, '/');
  const char* file_name_end = std::strstr(logMessage, ", Line ");

  const char* trim_start = file_name_start ? file_name_start + 1 : logMessage;
  const char* fallback_start = file_name_end ? file_name_end + 2 : logMessage;
  return trim_start < fallback_start ? trim_start : fallback_start;
}

}  // anonymous namespace

KeymasterLogger::KeymasterLogger() {
  set_instance(this);
}

int KeymasterLogger::log_msg(LogLevel level,
                             const char* fmt,
                             va_list args) const {
  std::string msg = base::StringPrintV(TrimFilePath(fmt), args);

  switch (level) {
    case DEBUG_LVL:
    case INFO_LVL:
      LOG(INFO) << kLogTag << msg;
      break;
    case WARNING_LVL:
      LOG(WARNING) << kLogTag << msg;
      break;
    case ERROR_LVL:
    case SEVERE_LVL:
      LOG(ERROR) << kLogTag << msg;
      break;
  }

  return 0;
}

const char* TrimFilePathForTesting(const char* logMessage) {
  return TrimFilePath(logMessage);
}

}  // namespace keymaster
}  // namespace arc
