| 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_
|
|
|