1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/drive/event_logger.h"
6
7#include "base/logging.h"
8#include "base/strings/stringprintf.h"
9
10namespace drive {
11
12EventLogger::Event::Event(
13    int id, logging::LogSeverity severity, const std::string& what)
14    : id(id),
15      severity(severity),
16      when(base::Time::Now()),
17      what(what) {
18}
19
20EventLogger::EventLogger()
21    : history_size_(kDefaultHistorySize),
22      next_event_id_(0) {
23}
24
25EventLogger::~EventLogger() {
26}
27
28void EventLogger::LogRawString(logging::LogSeverity severity,
29                               const std::string& what) {
30  base::AutoLock auto_lock(lock_);
31  history_.push_back(Event(next_event_id_, severity, what));
32  ++next_event_id_;
33  if (history_.size() > history_size_)
34    history_.pop_front();
35}
36
37void EventLogger::Log(logging::LogSeverity severity, const char* format, ...) {
38  std::string what;
39
40  va_list args;
41  va_start(args, format);
42  base::StringAppendV(&what, format, args);
43  va_end(args);
44
45  DVLOG(1) << what;
46  LogRawString(severity, what);
47}
48
49void EventLogger::SetHistorySize(size_t history_size) {
50  base::AutoLock auto_lock(lock_);
51  history_.clear();
52  history_size_ = history_size;
53}
54
55std::vector<EventLogger::Event> EventLogger::GetHistory() {
56  base::AutoLock auto_lock(lock_);
57  std::vector<Event> output;
58  output.assign(history_.begin(), history_.end());
59  return output;
60}
61
62
63}  // namespace drive
64