event_logger.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/drive/event_logger.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/logging.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/strings/stringprintf.h" 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace drive { 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)EventLogger::Event::Event( 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int id, logging::LogSeverity severity, const std::string& what) 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : id(id), 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) severity(severity), 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) when(base::Time::Now()), 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) what(what) { 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EventLogger::EventLogger() 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : history_size_(kDefaultHistorySize), 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) next_event_id_(0) { 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EventLogger::~EventLogger() { 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void EventLogger::LogRawString(logging::LogSeverity severity, 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::string& what) { 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::AutoLock auto_lock(lock_); 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) history_.push_back(Event(next_event_id_, severity, what)); 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ++next_event_id_; 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (history_.size() > history_size_) 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci history_.pop_front(); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void EventLogger::Log(logging::LogSeverity severity, const char* format, ...) { 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string what; 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) va_list args; 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) va_start(args, format); 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::StringAppendV(&what, format, args); 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) va_end(args); 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DVLOG(1) << what; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LogRawString(severity, what); 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void EventLogger::SetHistorySize(size_t history_size) { 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::AutoLock auto_lock(lock_); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) history_.clear(); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) history_size_ = history_size; 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)std::vector<EventLogger::Event> EventLogger::GetHistory() { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::AutoLock auto_lock(lock_); 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<Event> output; 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) output.assign(history_.begin(), history_.end()); 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return output; 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace drive 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)