// Copyright 2019 The Fuchsia 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 "src/developer/debug/shared/logging/logging.h"

#include <stdio.h>

namespace debug_ipc {

LogStatement::LogStatement(FileLineFunction origin, LogCategory category)
    : origin_(std::move(origin)), category_(category) {
  should_log_ = false;
  if (!IsLogCategoryActive(category_))
    return;

  start_time_ = SecondsSinceStart();
  should_log_ = true;
  PushLogEntry(this);
}

std::string LogStatement::GetMsg() {
  return stream_.str();
}

LogStatement::~LogStatement() {
  if (!IsLogCategoryActive(category_))
    return;

  if (!should_log_)
    return;

  PopLogEntry(category_, origin_, stream_.str(), start_time_, SecondsSinceStart());
}

}  // namespace debug_ipc
// namespace debug_ipc
