Index: chromeos/device_event_log.h |
diff --git a/chromeos/device_event_log.h b/chromeos/device_event_log.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ae7e80edb3ac5bf05e419b96f8a98ae2a155c394 |
--- /dev/null |
+++ b/chromeos/device_event_log.h |
@@ -0,0 +1,140 @@ |
+// Copyright 2014 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 CHROMEOS_DEVICE_EVENT_LOG_H_ |
+#define CHROMEOS_DEVICE_EVENT_LOG_H_ |
+ |
+#include <cstring> |
+#include <sstream> |
+ |
+#include "base/basictypes.h" |
+#include "chromeos/chromeos_export.h" |
+ |
+namespace chromeos { |
+ |
+// These macros can be used to log chromeos device related events. |
+// The following values should be used for |level| in these macros: |
+// ERROR Unexpected events, or device level failures. Use sparingly. |
+// USER Events initiated directly by a user (or Chrome) action. |
+// EVENT Default event type. |
+// DEBUG Debugging details that are usually not interesting. |
+// Examples: |
+// NET_LOG(EVENT) << "NetworkState Changed " << name << ": " << state; |
+// POWER_LOG(USER) << "Suspend requested"; |
+ |
+#define NET_LOG(level) \ |
+ DEVICE_LOG(::chromeos::device_event_log::LOG_TYPE_NETWORK, \ |
+ ::chromeos::device_event_log::LOG_LEVEL_##level) |
+#define POWER_LOG(level) \ |
+ DEVICE_LOG(::chromeos::device_event_log::LOG_TYPE_POWER, \ |
+ ::chromeos::device_event_log::LOG_LEVEL_##level) |
+ |
+// Generally prefer the above macros unless |level| is not constant. |
+ |
+#define DEVICE_LOG(type, level) \ |
+ ::chromeos::device_event_log::internal::DeviceEventLogInstance( \ |
+ __FILE__, __LINE__, type, level).stream() |
+ |
+namespace device_event_log { |
+ |
+// Used to specify the type of event. |
+enum LogType { |
+ // Shill / network configuration related events. |
+ LOG_TYPE_NETWORK, |
+ // Power manager related events. |
+ LOG_TYPE_POWER, |
+ // Use this in GetAsString for non NETWORK events (which are more frequent). |
+ LOG_TYPE_NON_NETWORK, |
+ // Use this in GetAsString for all events. |
+ LOG_TYPE_ALL, |
+}; |
+ |
+// Used to specify the detail level for logging. In GetAsString, used to |
+// specify the maximum detail level (i.e. EVENT will include USER and ERROR). |
+// See top-level comment for guidelines for each type. |
+enum LogLevel { |
+ LOG_LEVEL_ERROR = 0, |
+ LOG_LEVEL_USER = 1, |
+ LOG_LEVEL_EVENT = 2, |
+ LOG_LEVEL_DEBUG = 3 |
+}; |
+ |
+// Used to specify which order to output event entries in GetAsString. |
+enum StringOrder { OLDEST_FIRST, NEWEST_FIRST }; |
+ |
+// Initializes / shuts down device event logging. If |max_entries| = 0 the |
+// default value will be used. |
+CHROMEOS_EXPORT void Initialize(size_t max_entries); |
+CHROMEOS_EXPORT void Shutdown(); |
+ |
+// If the global instance is initialized, adds an entry to it. Regardless of |
+// whether the global instance was intitialzed, this logs the event to |
+// LOG(ERROR) if |type| = ERROR or VLOG(1) otherwise. |
+CHROMEOS_EXPORT void AddEntry(const char* file, |
+ int line, |
+ LogType type, |
+ LogLevel level, |
+ const std::string& event); |
+ |
+// For backwards compatibility with network_event_log. Combines |event| and |
+// |description| and calls AddEntry(). |
+CHROMEOS_EXPORT void AddEntryWithDescription(const char* file, |
+ int line, |
+ LogType type, |
+ LogLevel level, |
+ const std::string& event, |
+ const std::string& description); |
+ |
+// Outputs the log to a formatted string. |
+// |order| determines which order to output the events. |
+// |format| is a string that determines which elements to show. Elements |
+// must be comma-separated, e.g. "time,desc". |
+// Note: order of the format strings does not affect the output. |
+// "time" - Include a timestamp. |
+// "file" - Include file and line number. |
+// "type" - Include the event type. |
+// "html" - Include html tags. |
+// "json" - Return as JSON format |
+// Only events matching |log_type| are included in the output. |
+// Only events with |log_level| <= |max_level| are included in the output. |
+// If |max_events| > 0, limits how many events are output. |
+// If |json| is specified, returns a JSON list of dictionaries containing time, |
+// level, file, event, and description. |
+CHROMEOS_EXPORT std::string GetAsString(StringOrder order, |
+ const std::string& format, |
+ LogType log_type, |
+ LogLevel max_level, |
+ size_t max_events); |
+ |
+CHROMEOS_EXPORT extern const LogLevel kDefaultLogLevel; |
+ |
+namespace internal { |
+ |
+class CHROMEOS_EXPORT DeviceEventLogInstance { |
+ public: |
+ DeviceEventLogInstance(const char* file, |
+ int line, |
+ device_event_log::LogType type, |
+ device_event_log::LogLevel level); |
+ ~DeviceEventLogInstance(); |
+ |
+ std::ostream& stream() { return stream_; } |
+ |
+ private: |
+ const char* file_; |
+ const int line_; |
+ device_event_log::LogType type_; |
+ device_event_log::LogLevel level_; |
+ std::ostringstream stream_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DeviceEventLogInstance); |
+}; |
+ |
+} // namespace internal |
+ |
+} // namespace device_event_log |
+ |
+} // namespace chromeos |
+ |
+#endif // CHROMEOS_DEVICE_EVENT_LOG_H_ |