| // 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. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_SHARED_LOGGING_LOGGING_H_ |
| #define SRC_DEVELOPER_DEBUG_SHARED_LOGGING_LOGGING_H_ |
| |
| // This header is meant to be the hub of debug logging: timers, logging, etc. There is no need to |
| // include the other headers directly. |
| |
| #include <sstream> |
| |
| #include "src/developer/debug/shared/logging/macros.h" |
| #include "src/developer/debug/shared/logging/debug.h" |
| #include "src/developer/debug/shared/logging/file_line_function.h" |
| |
| namespace debug_ipc { |
| |
| // Normally you would use this macro to create logging statements. |
| // Example: |
| // |
| // DEBUG_LOG(Job) << "Some job statement."; |
| // DEBUG_LOG(MessageLoop) << "Some event with id " << id; |
| // |
| // If the logging will occur on some other function, you can pass the location into the other macro: |
| // |
| // |
| // if (err.has_error()) |
| // LogSomewhereElse(FROM_HERE, LogCategory::kAgent, error.msg()); |
| // |
| // ... |
| // |
| // void LogSomewhereElse(FileLineFunction location, LogCategory category, std::string msg) { |
| // ... |
| // DEBUG_LOG_WITH_LOCATION(category, location) << msg; |
| // } |
| // |
| |
| #define DEBUG_LOG_WITH_LOCATION(category, location) \ |
| ::debug_ipc::LogStatement STRINGIFY(__debug_log, __LINE__)( \ |
| location, ::debug_ipc::LogCategory::k##category); \ |
| STRINGIFY(__debug_log, __LINE__).stream() |
| |
| #define DEBUG_LOG(category) \ |
| DEBUG_LOG_WITH_LOCATION(category, FROM_HERE) |
| |
| // Creates a conditional logger depending whether the debug mode is active or not. See debug.h for |
| // more details. |
| class LogStatement { |
| public: |
| explicit LogStatement(FileLineFunction origin, LogCategory); |
| ~LogStatement(); |
| |
| std::ostream& stream() { return stream_; } |
| std::string GetMsg(); |
| |
| const FileLineFunction& origin() const { return origin_; } |
| LogCategory category() const { return category_; } |
| double start_time() const { return start_time_; } |
| |
| private: |
| FileLineFunction origin_; |
| LogCategory category_; |
| bool should_log_ = false; |
| double start_time_; |
| |
| std::ostringstream stream_; |
| }; |
| |
| } // namespace debug_ipc |
| |
| #endif // SRC_DEVELOPER_DEBUG_SHARED_LOGGING_LOGGING_H_ |