Home | History | Annotate | Download | only in sync_file_system
      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->LogRawString(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