Send all protobuf logging to logcat by default on Android

Currently the default for protobuf on Android is to silently drop all log
messages. This makes debugging difficult because things like GOOGLE_LOG(FATAL)
will crash the process without actually logging a useful error.

This CL changes the logging so that by default we send messages for all log
levels to logcat (and stderr). Users can override this by setting
GOOGLE_PROTOBUF_MIN_LOG_LEVEL. Also, that option was not being respected for
non-Android platforms so I went ahead and fixed that to make things consistent.
pull/2459/head
Adam Cozzette 8 years ago
parent 057389cae3
commit 2f29f0ae09
  1. 13
      src/google/protobuf/stubs/common.cc

@ -108,11 +108,17 @@ string VersionString(int version) {
// =================================================================== // ===================================================================
// emulates google3/base/logging.cc // emulates google3/base/logging.cc
// If the minimum logging level is not set, we default to logging messages for
// all levels.
#ifndef GOOGLE_PROTOBUF_MIN_LOG_LEVEL
#define GOOGLE_PROTOBUF_MIN_LOG_LEVEL LOGLEVEL_INFO
#endif
namespace internal { namespace internal {
#if defined(__ANDROID__) #if defined(__ANDROID__)
inline void DefaultLogHandler(LogLevel level, const char* filename, int line, inline void DefaultLogHandler(LogLevel level, const char* filename, int line,
const string& message) { const string& message) {
#ifdef GOOGLE_PROTOBUF_MIN_LOG_LEVEL
if (level < GOOGLE_PROTOBUF_MIN_LOG_LEVEL) { if (level < GOOGLE_PROTOBUF_MIN_LOG_LEVEL) {
return; return;
} }
@ -143,11 +149,14 @@ inline void DefaultLogHandler(LogLevel level, const char* filename, int line,
__android_log_write(ANDROID_LOG_FATAL, "libprotobuf-native", __android_log_write(ANDROID_LOG_FATAL, "libprotobuf-native",
"terminating.\n"); "terminating.\n");
} }
#endif
} }
#else #else
void DefaultLogHandler(LogLevel level, const char* filename, int line, void DefaultLogHandler(LogLevel level, const char* filename, int line,
const string& message) { const string& message) {
if (level < GOOGLE_PROTOBUF_MIN_LOG_LEVEL) {
return;
}
static const char* level_names[] = { "INFO", "WARNING", "ERROR", "FATAL" }; static const char* level_names[] = { "INFO", "WARNING", "ERROR", "FATAL" };
// We use fprintf() instead of cerr because we want this to work at static // We use fprintf() instead of cerr because we want this to work at static

Loading…
Cancel
Save