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