|
1 // Copyright (c) 2006-2009 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 "base/logging.h" |
|
6 #include "prmem.h" |
|
7 #include "prprf.h" |
|
8 #include "base/string_util.h" |
|
9 #include "nsXPCOM.h" |
|
10 |
|
11 namespace mozilla { |
|
12 |
|
13 Logger::~Logger() |
|
14 { |
|
15 PRLogModuleLevel prlevel = PR_LOG_DEBUG; |
|
16 int xpcomlevel = -1; |
|
17 |
|
18 switch (mSeverity) { |
|
19 case LOG_INFO: |
|
20 prlevel = PR_LOG_DEBUG; |
|
21 xpcomlevel = -1; |
|
22 break; |
|
23 |
|
24 case LOG_WARNING: |
|
25 prlevel = PR_LOG_WARNING; |
|
26 xpcomlevel = NS_DEBUG_WARNING; |
|
27 break; |
|
28 |
|
29 case LOG_ERROR: |
|
30 prlevel = PR_LOG_ERROR; |
|
31 xpcomlevel = NS_DEBUG_WARNING; |
|
32 break; |
|
33 |
|
34 case LOG_ERROR_REPORT: |
|
35 prlevel = PR_LOG_ERROR; |
|
36 xpcomlevel = NS_DEBUG_ASSERTION; |
|
37 break; |
|
38 |
|
39 case LOG_FATAL: |
|
40 prlevel = PR_LOG_ERROR; |
|
41 xpcomlevel = NS_DEBUG_ABORT; |
|
42 break; |
|
43 } |
|
44 |
|
45 PR_LOG(GetLog(), prlevel, ("%s:%i: %s", mFile, mLine, mMsg ? mMsg : "<no message>")); |
|
46 if (xpcomlevel != -1) |
|
47 NS_DebugBreak(xpcomlevel, mMsg, NULL, mFile, mLine); |
|
48 |
|
49 PR_Free(mMsg); |
|
50 } |
|
51 |
|
52 void |
|
53 Logger::printf(const char* fmt, ...) |
|
54 { |
|
55 va_list args; |
|
56 va_start(args, fmt); |
|
57 mMsg = PR_vsprintf_append(mMsg, fmt, args); |
|
58 va_end(args); |
|
59 } |
|
60 |
|
61 PRLogModuleInfo* Logger::gChromiumPRLog; |
|
62 |
|
63 PRLogModuleInfo* Logger::GetLog() |
|
64 { |
|
65 if (!gChromiumPRLog) |
|
66 gChromiumPRLog = PR_NewLogModule("chromium"); |
|
67 return gChromiumPRLog; |
|
68 } |
|
69 |
|
70 } // namespace mozilla |
|
71 |
|
72 mozilla::Logger& |
|
73 operator<<(mozilla::Logger& log, const char* s) |
|
74 { |
|
75 log.printf("%s", s); |
|
76 return log; |
|
77 } |
|
78 |
|
79 mozilla::Logger& |
|
80 operator<<(mozilla::Logger& log, const std::string& s) |
|
81 { |
|
82 log.printf("%s", s.c_str()); |
|
83 return log; |
|
84 } |
|
85 |
|
86 mozilla::Logger& |
|
87 operator<<(mozilla::Logger& log, int i) |
|
88 { |
|
89 log.printf("%i", i); |
|
90 return log; |
|
91 } |
|
92 |
|
93 mozilla::Logger& |
|
94 operator<<(mozilla::Logger& log, const std::wstring& s) |
|
95 { |
|
96 log.printf("%s", WideToASCII(s).c_str()); |
|
97 return log; |
|
98 } |
|
99 |
|
100 mozilla::Logger& |
|
101 operator<<(mozilla::Logger& log, void* p) |
|
102 { |
|
103 log.printf("%p", p); |
|
104 return log; |
|
105 } |