147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/* 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Copyright 2012 The WebRTC Project Authors. All rights reserved. 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Use of this source code is governed by a BSD-style license 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * in the file PATENTS. All contributing project authors may 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// This file overrides the logging macros in libjingle (webrtc/base/logging.h). 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Instead of using libjingle's logging implementation, the libjingle macros are 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// mapped to the corresponding base/logging.h macro (chromium's VLOG). 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// If this file is included outside of libjingle (e.g. in wrapper code) it 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// should be included after base/logging.h (if any) or compiler error or 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// unexpected behavior may occur (macros that have the same name in libjingle as 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// in chromium will use the libjingle definition if this file is included 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// first). 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Setting the LoggingSeverity (and lower) that should be written to file should 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// be done via command line by specifying the flags: 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// --vmodule or --v please see base/logging.h for details on how to use them. 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Specifying what file to write to is done using InitLogging also in 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// base/logging.h. 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// The macros and classes declared in here are not described as they are 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// NOT TO BE USED outside of libjingle. 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef THIRD_PARTY_LIBJINGLE_OVERRIDES_WEBRTC_BASE_LOGGING_H_ 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define THIRD_PARTY_LIBJINGLE_OVERRIDES_WEBRTC_BASE_LOGGING_H_ 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <sstream> 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <string> 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "base/logging.h" 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "third_party/webrtc/base/scoped_ref_ptr.h" 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc { 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/////////////////////////////////////////////////////////////////////////////// 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// ConstantLabel can be used to easily generate string names from constant 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// values. This can be useful for logging descriptive names of error messages. 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Usage: 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// const ConstantLabel LIBRARY_ERRORS[] = { 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// KLABEL(SOME_ERROR), 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// KLABEL(SOME_OTHER_ERROR), 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// ... 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LASTLABEL 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// } 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// int err = LibraryFunc(); 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LOG(LS_ERROR) << "LibraryFunc returned: " 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// << ErrorName(err, LIBRARY_ERRORS); 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgstruct ConstantLabel { 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int value; 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const char* label; 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define KLABEL(x) { x, #x } 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LASTLABEL { 0, 0 } 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst char* FindLabel(int value, const ConstantLabel entries[]); 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgstd::string ErrorName(int err, const ConstantLabel* err_table); 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org////////////////////////////////////////////////////////////////////// 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Note that the non-standard LoggingSeverity aliases exist because they are 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// still in broad use. The meanings of the levels are: 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LS_SENSITIVE: Information which should only be logged with the consent 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// of the user, due to privacy concerns. 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LS_VERBOSE: This level is for data which we do not want to appear in the 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// normal debug log, but should appear in diagnostic logs. 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LS_INFO: Chatty level used in debugging for all sorts of things, the default 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// in debug builds. 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LS_WARNING: Something that may warrant investigation. 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LS_ERROR: Something that should not have occurred. 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Note that LoggingSeverity is mapped over to chromiums verbosity levels where 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// anything lower than or equal to the current verbosity level is written to 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// file which is the opposite of logging severity in libjingle where higher 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// severity numbers than or equal to the current severity level are written to 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// file. Also, note that the values are explicitly defined here for convenience 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// since the command line flag must be set using numerical values. 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgenum LoggingSeverity { LS_ERROR = 1, 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LS_WARNING = 2, 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LS_INFO = 3, 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LS_VERBOSE = 4, 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LS_SENSITIVE = 5, 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org INFO = LS_INFO, 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org WARNING = LS_WARNING, 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LERROR = LS_ERROR }; 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// LogErrorContext assists in interpreting the meaning of an error value. 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgenum LogErrorContext { 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ERRCTX_NONE, 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ERRCTX_ERRNO, // System-local errno 9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ERRCTX_HRESULT, // Windows HRESULT 9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ERRCTX_OSSTATUS, // MacOS OSStatus 9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Abbreviations for LOG_E macro 9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ERRCTX_EN = ERRCTX_ERRNO, // LOG_E(sev, EN, x) 10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ERRCTX_HR = ERRCTX_HRESULT, // LOG_E(sev, HR, x) 10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ERRCTX_OS = ERRCTX_OSSTATUS, // LOG_E(sev, OS, x) 10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Class that writes a log message to the logging delegate ("WebRTC logging 10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// stream" in Chrome) and to Chrome's logging stream. 10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass DiagnosticLogMessage { 10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DiagnosticLogMessage(const char* file, int line, LoggingSeverity severity, 10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool log_to_chrome, LogErrorContext err_ctx, int err); 11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DiagnosticLogMessage(const char* file, int line, LoggingSeverity severity, 11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool log_to_chrome, LogErrorContext err_ctx, int err, 11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const char* module); 11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ~DiagnosticLogMessage(); 11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void CreateTimestamp(); 11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::ostream& stream() { return print_stream_; } 11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private: 12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const char* file_name_; 12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const int line_; 12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const LoggingSeverity severity_; 12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const bool log_to_chrome_; 12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::string extra_; 12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org std::ostringstream print_stream_; 12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// This class is used to explicitly ignore values in the conditional 13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// logging macros. This avoids compiler warnings like "value computed 13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// is not used" and "statement has no effect". 13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass LogMessageVoidify { 13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LogMessageVoidify() { } 13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // This has to be an operator with a precedence lower than << but 13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // higher than ?: 13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void operator&(std::ostream&) { } 13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org////////////////////////////////////////////////////////////////////// 14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Logging Helpers 14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org////////////////////////////////////////////////////////////////////// 14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass LogMultilineState { 14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org size_t unprintable_count_[2]; 14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LogMultilineState() { 14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org unprintable_count_[0] = unprintable_count_[1] = 0; 15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 153cd27c3bdf4f9a3feedfa785211bfb81fb9ffc54fglaznev@webrtc.orgclass LogMessage { 154cd27c3bdf4f9a3feedfa785211bfb81fb9ffc54fglaznev@webrtc.org public: 155cd27c3bdf4f9a3feedfa785211bfb81fb9ffc54fglaznev@webrtc.org static void LogToDebug(int min_sev); 156cd27c3bdf4f9a3feedfa785211bfb81fb9ffc54fglaznev@webrtc.org}; 157cd27c3bdf4f9a3feedfa785211bfb81fb9ffc54fglaznev@webrtc.org 15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// When possible, pass optional state variable to track various data across 15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// multiple calls to LogMultiline. Otherwise, pass NULL. 16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgvoid LogMultiline(LoggingSeverity level, const char* label, bool input, 16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org const void* data, size_t len, bool hex_mode, 16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LogMultilineState* state); 16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// TODO(grunell): Change name to InitDiagnosticLoggingDelegate or 16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// InitDiagnosticLogging. Change also in init_webrtc.h/cc. 16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// TODO(grunell): typedef the delegate function. 16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgvoid InitDiagnosticLoggingDelegateFunction( 16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void (*delegate)(const std::string&)); 16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgvoid SetExtraLoggingInit( 17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org void (*function)(void (*delegate)(const std::string&))); 17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // namespace rtc 17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org////////////////////////////////////////////////////////////////////// 17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Libjingle macros which are mapped over to their VLOG equivalent in 17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// base/logging.h 17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org////////////////////////////////////////////////////////////////////// 17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(LOGGING_INSIDE_WEBRTC) 18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define DIAGNOSTIC_LOG(sev, ctx, err, ...) \ 18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::DiagnosticLogMessage( \ 18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org __FILE__, __LINE__, sev, VLOG_IS_ON(sev), \ 18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::ERRCTX_ ## ctx, err, ##__VA_ARGS__).stream() 18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_CHECK_LEVEL(sev) VLOG_IS_ON(rtc::sev) 18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_CHECK_LEVEL_V(sev) VLOG_IS_ON(sev) 18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_V(sev) DIAGNOSTIC_LOG(sev, NONE, 0) 19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#undef LOG 19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG(sev) DIAGNOSTIC_LOG(rtc::sev, NONE, 0) 19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// The _F version prefixes the message with the current function name. 19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(__GNUC__) && defined(_DEBUG) 19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_F(sev) LOG(sev) << __PRETTY_FUNCTION__ << ": " 19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else 19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_F(sev) LOG(sev) << __FUNCTION__ << ": " 19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif 19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_E(sev, ctx, err, ...) \ 20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DIAGNOSTIC_LOG(rtc::sev, ctx, err, ##__VA_ARGS__) 20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#undef LOG_ERRNO_EX 20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_ERRNO_EX(sev, err) LOG_E(sev, ERRNO, err) 20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#undef LOG_ERRNO 20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_ERRNO(sev) LOG_ERRNO_EX(sev, errno) 20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(WEBRTC_WIN) 20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_GLE_EX(sev, err) LOG_E(sev, HRESULT, err) 21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_GLE(sev) LOG_GLE_EX(sev, GetLastError()) 21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_GLEM(sev, mod) LOG_E(sev, HRESULT, GetLastError(), mod) 21247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_ERR_EX(sev, err) LOG_GLE_EX(sev, err) 21347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_ERR(sev) LOG_GLE(sev) 21447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LAST_SYSTEM_ERROR (::GetLastError()) 21547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#else 21647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_ERR_EX(sev, err) LOG_ERRNO_EX(sev, err) 21747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LOG_ERR(sev) LOG_ERRNO(sev) 21847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define LAST_SYSTEM_ERROR (errno) 21947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif // OS_WIN 22047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#undef PLOG 22247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define PLOG(sev, err) LOG_ERR_EX(sev, err) 22347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif // LOGGING_INSIDE_WEBRTC 22547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 22647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif // THIRD_PARTY_LIBJINGLE_OVERRIDES_WEBRTC_BASE_LOGGING_H_ 227