blob: f18bff50d092778c51cd704e192a7c88e2ee871d [file] [log] [blame]
// 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_IMPL_H_
#define CHROMEOS_DEVICE_EVENT_LOG_IMPL_H_
#include <list>
#include <string>
#include "base/time/time.h"
#include "chromeos/chromeos_export.h"
#include "chromeos/device_event_log.h"
namespace chromeos {
namespace device_event_log {
class CHROMEOS_EXPORT DeviceEventLogImpl {
public:
struct LogEntry {
LogEntry(const char* filedesc,
int file_line,
LogType log_type,
LogLevel log_level,
const std::string& event);
std::string file;
int file_line;
LogType log_type;
LogLevel log_level;
std::string event;
base::Time time;
int count;
};
explicit DeviceEventLogImpl(size_t max_entries);
~DeviceEventLogImpl();
// Implements device_event_log::AddEntry.
void AddEntry(const char* file,
int file_line,
LogType type,
LogLevel level,
const std::string& event);
// Implements device_event_log::GetAsString.
std::string GetAsString(StringOrder order,
const std::string& format,
const std::string& types,
LogLevel max_level,
size_t max_events);
// Called from device_event_log::AddEntry if the global instance has not been
// created (or has already been destroyed). Logs to LOG(ERROR) or VLOG(1).
static void SendToVLogOrErrorLog(const char* file,
int file_line,
LogType type,
LogLevel log_level,
const std::string& event);
private:
friend class DeviceEventLogTest;
typedef std::list<LogEntry> LogEntryList;
void AddLogEntry(const LogEntry& entry);
// For testing
size_t max_entries() const { return max_entries_; }
void set_max_entries_for_test(size_t entries) { max_entries_ = entries; }
size_t max_entries_;
LogEntryList entries_;
DISALLOW_COPY_AND_ASSIGN(DeviceEventLogImpl);
};
} // namespace device_event_log
} // namespace chromeos
#endif // CHROMEOS_DEVICE_EVENT_LOG_IMPL_H_