// Copyright 2018 The Chromium Authors // 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 <sstream> namespace openscreen { enum class LogLevel { … }; // 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 std::string_view 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_