// Copyright 2018 The Chromium 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 PLATFORM_API_LOGGING_H_ #define PLATFORM_API_LOGGING_H_ #include namespace openscreen { enum class LogLevel { // Very detailed information, often used for evaluating performance or // debugging production issues in-the-wild. kVerbose = 0, // Used occasionally to note events of interest, but not for indicating any // problems. This is also used for general console messaging in Open Screen's // standalone executables. kInfo = 1, // Indicates a problem that may or may not lead to an operational failure. kWarning = 2, // Indicates an operational failure that may or may not cause a component to // stop working. kError = 3, // Indicates a logic flaw, corruption, impossible/unanticipated situation, or // operational failure so serious that Open Screen will soon call Break() to // abort the current process. Examples: security/privacy risks, memory // management issues, API contract violations. kFatal = 4, }; // Returns true if |level| is at or above the level where the embedder will // record/emit log entries from the code in |file|. bool IsLoggingOn(LogLevel level, const char* file); // Record a log entry, consisting of its logging level, location and message. // The embedder may filter-out entries according to its own policy, but this // function will not be called if IsLoggingOn(level, file) returns false. // Whenever |level| is kFatal, Open Screen will call Break() immediately after // this returns. // // |message| is passed as a string stream to avoid unnecessary string copies. // Embedders can call its rdbuf() or str() methods to access the log message. void LogWithLevel(LogLevel level, const char* file, int line, std::stringstream message); // Breaks into the debugger, if one is present. Otherwise, aborts the current // process (i.e., this function should not return). In production builds, an // embedder could invoke its infrastructure for performing "dumps," consisting // of thread stack traces and other relevant process state information, before // aborting the process. [[noreturn]] void Break(); } // namespace openscreen #endif // PLATFORM_API_LOGGING_H_