1 // Copyright 2013 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/sync_file_system/logger.h" 6 7 #include "base/file_util.h" 8 #include "base/lazy_instance.h" 9 #include "base/location.h" 10 #include "base/strings/stringprintf.h" 11 #include "chrome/browser/drive/event_logger.h" 12 13 namespace sync_file_system { 14 namespace util { 15 namespace { 16 17 static base::LazyInstance<drive::EventLogger> g_logger = 18 LAZY_INSTANCE_INITIALIZER; 19 20 const char* LogSeverityToString(logging::LogSeverity level) { 21 switch (level) { 22 case logging::LOG_ERROR: 23 return "ERROR"; 24 case logging::LOG_WARNING: 25 return "WARNING"; 26 case logging::LOG_INFO: 27 return "INFO"; 28 case logging::LOG_VERBOSE: 29 return "VERBOSE"; 30 } 31 32 NOTREACHED(); 33 return "Unknown Log Severity"; 34 } 35 36 } // namespace 37 38 void ClearLog() { 39 g_logger.Pointer()->SetHistorySize(drive::kDefaultHistorySize); 40 } 41 42 void Log(logging::LogSeverity severity, 43 const tracked_objects::Location& location, 44 const char* format, 45 ...) { 46 std::string what; 47 48 va_list args; 49 va_start(args, format); 50 base::StringAppendV(&what, format, args); 51 va_end(args); 52 53 // Log to WebUI regardless of LogSeverity (e.g. ignores command line flags). 54 // On thread-safety: LazyInstance guarantees thread-safety for the object 55 // creation. EventLogger::Log() internally maintains the lock. 56 drive::EventLogger* ptr = g_logger.Pointer(); 57 ptr->Log(severity, base::StringPrintf("[%s] %s", 58 LogSeverityToString(severity), 59 what.c_str())); 60 61 // Log to console if the severity is at or above the min level. 62 // LOG_VERBOSE logs are also output if the verbosity of this module 63 // (sync_file_system/logger) is >= 1. 64 // TODO(kinuko,calvinlo): Reconsider this logging hack, it's not recommended 65 // to directly use LogMessage. 66 if (severity < logging::GetMinLogLevel() && !VLOG_IS_ON(1)) 67 return; 68 logging::LogMessage(location.file_name(), location.line_number(), severity) 69 .stream() << what; 70 } 71 72 std::vector<drive::EventLogger::Event> GetLogHistory() { 73 drive::EventLogger* ptr = g_logger.Pointer(); 74 return ptr->GetHistory(); 75 } 76 77 } // namespace util 78 } // namespace sync_file_system 79