OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/logging_win.h" | 5 #include "base/logging_win.h" |
6 #include "base/memory/singleton.h" | 6 #include "base/memory/singleton.h" |
7 #include <initguid.h> // NOLINT | 7 #include <initguid.h> // NOLINT |
8 | 8 |
9 namespace logging { | 9 namespace logging { |
10 | 10 |
11 using base::win::EtwEventLevel; | 11 using base::win::EtwEventLevel; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 | 50 |
51 // Bail if we're not logging, not at that level, | 51 // Bail if we're not logging, not at that level, |
52 // or if we're post-atexit handling. | 52 // or if we're post-atexit handling. |
53 LogEventProvider* provider = LogEventProvider::GetInstance(); | 53 LogEventProvider* provider = LogEventProvider::GetInstance(); |
54 if (provider == NULL || level > provider->enable_level()) | 54 if (provider == NULL || level > provider->enable_level()) |
55 return false; | 55 return false; |
56 | 56 |
57 // And now log the event. | 57 // And now log the event. |
58 if (provider->enable_flags() & ENABLE_LOG_MESSAGE_ONLY) { | 58 if (provider->enable_flags() & ENABLE_LOG_MESSAGE_ONLY) { |
59 EtwMofEvent<1> event(kLogEventId, LOG_MESSAGE, level); | 59 EtwMofEvent<1> event(kLogEventId, LOG_MESSAGE, level); |
60 event.SetField(0, message.length() + 1 - message_start, | 60 if (provider->enable_flags() & ENABLE_DETAILED_LOG_MESSAGE) { |
61 message.c_str() + message_start); | 61 event.SetField(0, message.length() + 1, message.c_str()); |
| 62 } else { |
| 63 event.SetField(0, message.length() + 1 - message_start, |
| 64 message.c_str() + message_start); |
| 65 } |
62 | 66 |
63 provider->Log(event.get()); | 67 provider->Log(event.get()); |
64 } else { | 68 } else { |
65 const size_t kMaxBacktraceDepth = 32; | 69 const size_t kMaxBacktraceDepth = 32; |
66 void* backtrace[kMaxBacktraceDepth]; | 70 void* backtrace[kMaxBacktraceDepth]; |
67 DWORD depth = 0; | 71 DWORD depth = 0; |
68 | 72 |
69 // Capture a stack trace if one is requested. | 73 // Capture a stack trace if one is requested. |
70 // requested per our enable flags. | 74 // requested per our enable flags. |
71 if (provider->enable_flags() & ENABLE_STACK_TRACE_CAPTURE) | 75 if (provider->enable_flags() & ENABLE_STACK_TRACE_CAPTURE) |
72 depth = CaptureStackBackTrace(2, kMaxBacktraceDepth, backtrace, NULL); | 76 depth = CaptureStackBackTrace(2, kMaxBacktraceDepth, backtrace, NULL); |
73 | 77 |
74 EtwMofEvent<5> event(kLogEventId, LOG_MESSAGE_FULL, level); | 78 EtwMofEvent<5> event(kLogEventId, LOG_MESSAGE_FULL, level); |
75 if (file == NULL) | 79 if (file == NULL) |
76 file = ""; | 80 file = ""; |
77 | 81 |
78 // Add the stack trace. | 82 // Add the stack trace. |
79 event.SetField(0, sizeof(depth), &depth); | 83 event.SetField(0, sizeof(depth), &depth); |
80 event.SetField(1, sizeof(backtrace[0]) * depth, &backtrace); | 84 event.SetField(1, sizeof(backtrace[0]) * depth, &backtrace); |
81 // The line. | 85 // The line. |
82 event.SetField(2, sizeof(line), &line); | 86 event.SetField(2, sizeof(line), &line); |
83 // The file. | 87 // The file. |
84 event.SetField(3, strlen(file) + 1, file); | 88 event.SetField(3, strlen(file) + 1, file); |
85 // And finally the message. | 89 // And finally the message. |
86 event.SetField(4, message.length() + 1 - message_start, | 90 if (provider->enable_flags() & ENABLE_DETAILED_LOG_MESSAGE) { |
87 message.c_str() + message_start); | 91 event.SetField(4, message.length() + 1, message.c_str()); |
| 92 } else { |
| 93 event.SetField(4, message.length() + 1 - message_start, |
| 94 message.c_str() + message_start); |
| 95 } |
88 | 96 |
89 provider->Log(event.get()); | 97 provider->Log(event.get()); |
90 } | 98 } |
91 | 99 |
92 // Don't increase verbosity in other log destinations. | 100 // Don't increase verbosity in other log destinations. |
93 if (severity < provider->old_log_level_) | 101 if (severity < provider->old_log_level_) |
94 return true; | 102 return true; |
95 | 103 |
96 return false; | 104 return false; |
97 } | 105 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 SetMinLogLevel(TRACE_LEVEL_INFORMATION - level); | 138 SetMinLogLevel(TRACE_LEVEL_INFORMATION - level); |
131 } | 139 } |
132 } | 140 } |
133 | 141 |
134 void LogEventProvider::OnEventsDisabled() { | 142 void LogEventProvider::OnEventsDisabled() { |
135 // Restore the old log level. | 143 // Restore the old log level. |
136 SetMinLogLevel(old_log_level_); | 144 SetMinLogLevel(old_log_level_); |
137 } | 145 } |
138 | 146 |
139 } // namespace logging | 147 } // namespace logging |
OLD | NEW |