root/chromeos/network/network_event_log.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright (c) 2012 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_NETWORK_NETWORK_EVENT_LOG_H_
#define CHROMEOS_NETWORK_NETWORK_EVENT_LOG_H_

#include <deque>
#include <string>

#include "base/basictypes.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
#include "chromeos/chromeos_export.h"

namespace base {
class Value;
}

namespace chromeos {

// Namespace for functions for logging network events.
namespace network_event_log {

// Used to determine which order to output event entries in GetAsString.
enum StringOrder {
  OLDEST_FIRST,
  NEWEST_FIRST
};

// Used to set the detail level for logging.
enum LogLevel {
  LOG_LEVEL_ERROR = 0,
  LOG_LEVEL_USER = 1,
  LOG_LEVEL_EVENT = 2,
  LOG_LEVEL_DEBUG = 3
};

// Default log level.
CHROMEOS_EXPORT extern const LogLevel kDefaultLogLevel;

// Initializes / shuts down network event logging. Calling Initialize more than
// once will reset the log.
CHROMEOS_EXPORT void Initialize();
CHROMEOS_EXPORT void Shutdown();

// Returns true if network event logging has been initialized.
CHROMEOS_EXPORT bool IsInitialized();

namespace internal {

// Gets the maximum number of log entries.
CHROMEOS_EXPORT size_t GetMaxLogEntries();

// Sets the maximum number of entries to something other than the default. If
// |max_entries| is less than the current maximum number of entries, this will
// delete any existing entries in excess of |max_entries|.
CHROMEOS_EXPORT void SetMaxLogEntries(size_t max_entries);

// Adds an entry to the event log at level specified by |log_level|.
// A maximum number of events are recorded after which new events replace
// old ones. Error events are prioritized such that error events will only be
// deleted if more than least half of the entries are errors (at which point
// the oldest error entry will be replaced). Does nothing unless Initialize()
// has been called. NOTE: Generally use NET_LOG instead.
CHROMEOS_EXPORT void AddEntry(const char* file,
                              int file_line,
                              LogLevel log_level,
                              const std::string& event,
                              const std::string& description);

}  // namespace internal

// 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.
//  "desc" - Include the description.
//  "html" - Include html tags.
//  "json" - Return as JSON format
// 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,
                                        LogLevel max_level,
                                        size_t max_events);

// Helper function for displaying a value as a string.
CHROMEOS_EXPORT std::string ValueAsString(const base::Value& value);

// Errors
#define NET_LOG_ERROR(event, desc) NET_LOG_LEVEL(                       \
    ::chromeos::network_event_log::LOG_LEVEL_ERROR, event, desc)

// Chrome initiated events, e.g. connection requests, scan requests,
// configuration removal (either from the UI or from ONC policy application).
#define NET_LOG_USER(event, desc) NET_LOG_LEVEL(                        \
    ::chromeos::network_event_log::LOG_LEVEL_USER, event, desc)

// Important events, e.g. state updates
#define NET_LOG_EVENT(event, desc) NET_LOG_LEVEL(                       \
    ::chromeos::network_event_log::LOG_LEVEL_EVENT, event, desc)

// Non-essential debugging events
#define NET_LOG_DEBUG(event, desc) NET_LOG_LEVEL(                       \
    ::chromeos::network_event_log::LOG_LEVEL_DEBUG, event, desc)

// Macro to include file and line number info in the event log.
#define NET_LOG_LEVEL(log_level, event, description)            \
  ::chromeos::network_event_log::internal::AddEntry(            \
      __FILE__, __LINE__, log_level, event, description)

}  // namespace network_event_log

}  // namespace chromeos

#endif  // CHROMEOS_NETWORK_NETWORK_EVENT_LOG_H_

/* [<][>][^][v][top][bottom][index][help] */