Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(618)

Side by Side Diff: webrtc/base/logging.cc

Issue 1338033003: Log to webrtc logging stream from java code. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: not lose tag Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 // of destructors at program exit. Let the person who sets the stream trigger 107 // of destructors at program exit. Let the person who sets the stream trigger
108 // cleanup by setting to NULL, or let it leak (safe at program exit). 108 // cleanup by setting to NULL, or let it leak (safe at program exit).
109 LogMessage::StreamList LogMessage::streams_ GUARDED_BY(LogMessage::crit_); 109 LogMessage::StreamList LogMessage::streams_ GUARDED_BY(LogMessage::crit_);
110 110
111 // Boolean options default to false (0) 111 // Boolean options default to false (0)
112 bool LogMessage::thread_, LogMessage::timestamp_; 112 bool LogMessage::thread_, LogMessage::timestamp_;
113 113
114 LogMessage::LogMessage(const char* file, int line, LoggingSeverity sev, 114 LogMessage::LogMessage(const char* file, int line, LoggingSeverity sev,
115 LogErrorContext err_ctx, int err, const char* module) 115 LogErrorContext err_ctx, int err, const char* module)
116 : severity_(sev), 116 : severity_(sev),
117 android_tag_(kLibjingle),
AlexG 2015/09/14 20:12:33 kLibjingle is defined for WEBRTC_ANDROID only - th
jiayl2 2015/09/14 20:54:38 Done.
117 warn_slow_logs_delay_(WARN_SLOW_LOGS_DELAY) { 118 warn_slow_logs_delay_(WARN_SLOW_LOGS_DELAY) {
118 if (timestamp_) { 119 if (timestamp_) {
119 uint32 time = TimeSince(LogStartTime()); 120 uint32 time = TimeSince(LogStartTime());
120 // Also ensure WallClockStartTime is initialized, so that it matches 121 // Also ensure WallClockStartTime is initialized, so that it matches
121 // LogStartTime. 122 // LogStartTime.
122 WallClockStartTime(); 123 WallClockStartTime();
123 print_stream_ << "[" << std::setfill('0') << std::setw(3) << (time / 1000) 124 print_stream_ << "[" << std::setfill('0') << std::setw(3) << (time / 1000)
124 << ":" << std::setw(3) << (time % 1000) << std::setfill(' ') 125 << ":" << std::setw(3) << (time % 1000) << std::setfill(' ')
125 << "] "; 126 << "] ";
126 } 127 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 break; 169 break;
169 } 170 }
170 #endif // WEBRTC_MAC && !defined(WEBRTC_IOS) 171 #endif // WEBRTC_MAC && !defined(WEBRTC_IOS)
171 default: 172 default:
172 break; 173 break;
173 } 174 }
174 extra_ = tmp.str(); 175 extra_ = tmp.str();
175 } 176 }
176 } 177 }
177 178
179 LogMessage::LogMessage(const char* file,
180 int line,
181 LoggingSeverity sev,
182 const std::string& tag)
183 : LogMessage(file, line, sev, ERRCTX_NONE, 0 /* err */, NULL /* module */) {
184 android_tag_ = tag;
AlexG 2015/09/14 20:12:33 Move this to ctor initialization list?
jiayl2 2015/09/14 20:54:38 That will cause compile error
185 }
186
178 LogMessage::~LogMessage() { 187 LogMessage::~LogMessage() {
179 if (!extra_.empty()) 188 if (!extra_.empty())
180 print_stream_ << " : " << extra_; 189 print_stream_ << " : " << extra_;
181 print_stream_ << std::endl; 190 print_stream_ << std::endl;
182 191
183 const std::string& str = print_stream_.str(); 192 const std::string& str = print_stream_.str();
184 if (severity_ >= dbg_sev_) { 193 if (severity_ >= dbg_sev_) {
185 OutputToDebug(str, severity_); 194 OutputToDebug(str, severity_, android_tag_);
186 } 195 }
187 196
188 uint32 before = Time(); 197 uint32 before = Time();
189 // Must lock streams_ before accessing 198 // Must lock streams_ before accessing
190 CritScope cs(&crit_); 199 CritScope cs(&crit_);
191 for (StreamList::iterator it = streams_.begin(); it != streams_.end(); ++it) { 200 for (StreamList::iterator it = streams_.begin(); it != streams_.end(); ++it) {
192 if (severity_ >= it->second) { 201 if (severity_ >= it->second) {
193 it->first->OnLogMessage(str); 202 it->first->OnLogMessage(str);
194 } 203 }
195 } 204 }
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 335
327 void LogMessage::UpdateMinLogSeverity() EXCLUSIVE_LOCKS_REQUIRED(crit_) { 336 void LogMessage::UpdateMinLogSeverity() EXCLUSIVE_LOCKS_REQUIRED(crit_) {
328 LoggingSeverity min_sev = dbg_sev_; 337 LoggingSeverity min_sev = dbg_sev_;
329 for (StreamList::iterator it = streams_.begin(); it != streams_.end(); ++it) { 338 for (StreamList::iterator it = streams_.begin(); it != streams_.end(); ++it) {
330 min_sev = std::min(dbg_sev_, it->second); 339 min_sev = std::min(dbg_sev_, it->second);
331 } 340 }
332 min_sev_ = min_sev; 341 min_sev_ = min_sev;
333 } 342 }
334 343
335 void LogMessage::OutputToDebug(const std::string& str, 344 void LogMessage::OutputToDebug(const std::string& str,
336 LoggingSeverity severity) { 345 LoggingSeverity severity,
346 const std::string& tag) {
337 bool log_to_stderr = log_to_stderr_; 347 bool log_to_stderr = log_to_stderr_;
338 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) && (!defined(DEBUG) || defined(N DEBUG)) 348 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) && (!defined(DEBUG) || defined(N DEBUG))
339 // On the Mac, all stderr output goes to the Console log and causes clutter. 349 // On the Mac, all stderr output goes to the Console log and causes clutter.
340 // So in opt builds, don't log to stderr unless the user specifically sets 350 // So in opt builds, don't log to stderr unless the user specifically sets
341 // a preference to do so. 351 // a preference to do so.
342 CFStringRef key = CFStringCreateWithCString(kCFAllocatorDefault, 352 CFStringRef key = CFStringCreateWithCString(kCFAllocatorDefault,
343 "logToStdErr", 353 "logToStdErr",
344 kCFStringEncodingUTF8); 354 kCFStringEncodingUTF8);
345 CFStringRef domain = CFBundleGetIdentifier(CFBundleGetMainBundle()); 355 CFStringRef domain = CFBundleGetIdentifier(CFBundleGetMainBundle());
346 if (key != NULL && domain != NULL) { 356 if (key != NULL && domain != NULL) {
(...skipping 23 matching lines...) Expand all
370 } 380 }
371 #endif // WEBRTC_WIN 381 #endif // WEBRTC_WIN
372 #if defined(WEBRTC_ANDROID) 382 #if defined(WEBRTC_ANDROID)
373 // Android's logging facility uses severity to log messages but we 383 // Android's logging facility uses severity to log messages but we
374 // need to map libjingle's severity levels to Android ones first. 384 // need to map libjingle's severity levels to Android ones first.
375 // Also write to stderr which maybe available to executable started 385 // Also write to stderr which maybe available to executable started
376 // from the shell. 386 // from the shell.
377 int prio; 387 int prio;
378 switch (severity) { 388 switch (severity) {
379 case LS_SENSITIVE: 389 case LS_SENSITIVE:
380 __android_log_write(ANDROID_LOG_INFO, kLibjingle, "SENSITIVE"); 390 __android_log_write(ANDROID_LOG_INFO, tag.c_str(), "SENSITIVE");
381 if (log_to_stderr) { 391 if (log_to_stderr) {
382 fprintf(stderr, "SENSITIVE"); 392 fprintf(stderr, "SENSITIVE");
383 fflush(stderr); 393 fflush(stderr);
384 } 394 }
385 return; 395 return;
386 case LS_VERBOSE: 396 case LS_VERBOSE:
387 prio = ANDROID_LOG_VERBOSE; 397 prio = ANDROID_LOG_VERBOSE;
388 break; 398 break;
389 case LS_INFO: 399 case LS_INFO:
390 prio = ANDROID_LOG_INFO; 400 prio = ANDROID_LOG_INFO;
AlexG 2015/09/14 20:12:33 May be use ANDROID_LOG_DEBUG here? We are mostly u
jiayl2 2015/09/14 20:54:38 Mapping info to info is more intuitive. Unless you
AlexG 2015/09/14 21:02:11 I meant all Lod.d call from Java will now actually
391 break; 401 break;
392 case LS_WARNING: 402 case LS_WARNING:
393 prio = ANDROID_LOG_WARN; 403 prio = ANDROID_LOG_WARN;
394 break; 404 break;
395 case LS_ERROR: 405 case LS_ERROR:
396 prio = ANDROID_LOG_ERROR; 406 prio = ANDROID_LOG_ERROR;
397 break; 407 break;
398 default: 408 default:
399 prio = ANDROID_LOG_UNKNOWN; 409 prio = ANDROID_LOG_UNKNOWN;
400 } 410 }
401 411
402 int size = str.size(); 412 int size = str.size();
403 int line = 0; 413 int line = 0;
404 int idx = 0; 414 int idx = 0;
405 const int max_lines = size / kMaxLogLineSize + 1; 415 const int max_lines = size / kMaxLogLineSize + 1;
406 if (max_lines == 1) { 416 if (max_lines == 1) {
407 __android_log_print(prio, kLibjingle, "%.*s", size, str.c_str()); 417 __android_log_print(prio, tag.c_str(), "%.*s", size, str.c_str());
408 } else { 418 } else {
409 while (size > 0) { 419 while (size > 0) {
410 const int len = std::min(size, kMaxLogLineSize); 420 const int len = std::min(size, kMaxLogLineSize);
411 // Use the size of the string in the format (str may have \0 in the 421 // Use the size of the string in the format (str may have \0 in the
412 // middle). 422 // middle).
413 __android_log_print(prio, kLibjingle, "[%d/%d] %.*s", 423 __android_log_print(prio, tag.c_str(), "[%d/%d] %.*s",
414 line + 1, max_lines, 424 line + 1, max_lines,
415 len, str.c_str() + idx); 425 len, str.c_str() + idx);
416 idx += len; 426 idx += len;
417 size -= len; 427 size -= len;
418 ++line; 428 ++line;
419 } 429 }
420 } 430 }
421 #endif // WEBRTC_ANDROID 431 #endif // WEBRTC_ANDROID
422 if (log_to_stderr) { 432 if (log_to_stderr) {
423 fprintf(stderr, "%s", str.c_str()); 433 fprintf(stderr, "%s", str.c_str());
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 } 552 }
543 553
544 if (state) { 554 if (state) {
545 state->unprintable_count_[input] = consecutive_unprintable; 555 state->unprintable_count_[input] = consecutive_unprintable;
546 } 556 }
547 } 557 }
548 558
549 ////////////////////////////////////////////////////////////////////// 559 //////////////////////////////////////////////////////////////////////
550 560
551 } // namespace rtc 561 } // namespace rtc
OLDNEW
« talk/app/webrtc/java/src/org/webrtc/Logging.java ('K') | « webrtc/base/logging.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698