// Copyright 2017 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 COMPONENTS_NTP_SNIPPETS_LOGGER_H_ #define COMPONENTS_NTP_SNIPPETS_LOGGER_H_ #include #include "base/containers/circular_deque.h" #include "base/location.h" #include "base/time/time.h" namespace ntp_snippets { class Logger { public: Logger(); ~Logger(); // The call is ignored if the logging is disabled. However, if constructing a // message is not cheap, do it only if |IsLoggingEnabled| returns true. void Log(const base::Location& from_here, const std::string& message); std::string GetHumanReadableLog() const; static bool IsLoggingEnabled(); static std::string TimeToString(const base::Time& time); private: struct LogItem { std::string message; base::Time time; base::Location from_where; LogItem(const std::string& message, const base::Time time, const base::Location& from_where); std::string ToString() const; }; // New items should be pushed back. base::circular_deque logged_items_; }; } // namespace ntp_snippets #endif // COMPONENTS_NTP_SNIPPETS_LOGGER_H_