Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Unified Diff: chromeos/device_event_log.h

Issue 773703002: Generalize network_event_log -> device_event_log (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Feedback Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698