- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync_file_system / logger.cc
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