Skip to content

Commit dd2df52

Browse files
amabluea-maurice
authored andcommitted
Hooked the new Logger class into Database.
Right now each instance of database has a logger, which is plumbed around to all the places we do logging. In the future we may want to add a separate logger for the networking layer as well. PiperOrigin-RevId: 266448039
1 parent c5fc220 commit dd2df52

30 files changed

+498
-446
lines changed

database/src/android/database_android.cc

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <assert.h>
1818
#include <jni.h>
1919

20+
#include "app/src/app_common.h"
2021
#include "app/src/embedded_file.h"
2122
#include "app/src/include/firebase/app.h"
2223
#include "app/src/include/firebase/future.h"
@@ -49,10 +50,10 @@ const char kApiIdentifier[] = "Database";
4950
// clang-format on
5051
METHOD_LOOKUP_DECLARATION(logger_level, LOGGER_LEVEL_METHODS)
5152

52-
METHOD_LOOKUP_DEFINITION(
53-
logger_level,
54-
PROGUARD_KEEP_CLASS "com/google/firebase/database/Logger$Level",
55-
LOGGER_LEVEL_METHODS)
53+
METHOD_LOOKUP_DEFINITION(logger_level,
54+
PROGUARD_KEEP_CLASS
55+
"com/google/firebase/database/Logger$Level",
56+
LOGGER_LEVEL_METHODS)
5657

5758
// clang-format off
5859
#define FIREBASE_DATABASE_METHODS(X) \
@@ -166,7 +167,8 @@ Mutex DatabaseInternal::init_mutex_; // NOLINT
166167
int DatabaseInternal::initialize_count_ = 0;
167168
std::map<jint, Error>* DatabaseInternal::java_error_to_cpp_ = nullptr;
168169

169-
DatabaseInternal::DatabaseInternal(App* app) : log_level_(kLogLevelInfo) {
170+
DatabaseInternal::DatabaseInternal(App* app)
171+
: logger_(app_common::FindAppLoggerByName(app->name())) {
170172
app_ = nullptr;
171173
if (!Initialize(app)) return;
172174
app_ = app;
@@ -179,7 +181,7 @@ DatabaseInternal::DatabaseInternal(App* app) : log_level_(kLogLevelInfo) {
179181
platform_app);
180182
env->DeleteLocalRef(platform_app);
181183
if (database_obj == nullptr) {
182-
LogWarning("Could not create default Database");
184+
logger_.LogWarning("Could not create default Database");
183185
util::CheckAndClearJniExceptions(env);
184186
// Something went wrong -> uninitialize the database
185187
Terminate(app_);
@@ -191,7 +193,8 @@ DatabaseInternal::DatabaseInternal(App* app) : log_level_(kLogLevelInfo) {
191193
}
192194

193195
DatabaseInternal::DatabaseInternal(App* app, const char* url)
194-
: constructor_url_(url), log_level_(kLogLevelInfo) {
196+
: constructor_url_(url),
197+
logger_(app_common::FindAppLoggerByName(app->name())) {
195198
app_ = nullptr;
196199
if (!Initialize(app)) return;
197200
app_ = app;
@@ -205,7 +208,7 @@ DatabaseInternal::DatabaseInternal(App* app, const char* url)
205208
platform_app, url_string);
206209
env->DeleteLocalRef(platform_app);
207210
if (database_obj == nullptr) {
208-
LogWarning("Could not create Database with URL '%s' .", url);
211+
logger_.LogWarning("Could not create Database with URL '%s' .", url);
209212
util::CheckAndClearJniExceptions(env);
210213
// Something went wrong -> uninitialize the database
211214
Terminate(app_);
@@ -238,12 +241,12 @@ static const struct {
238241

239242
// C++ log levels mapped to Logger.Level enum value names.
240243
const char* kCppLogLevelToLoggerLevelName[] = {
241-
"DEBUG", // kLogLevelVerbose --> Logger.Level.DEBUG
242-
"DEBUG", // kLogLevelDebug --> Logger.Level.DEBUG
243-
"INFO", // kLogLevelInfo --> Logger.Level.INFO
244-
"WARN", // kLogLevelWarning --> Logger.Level.WARN
245-
"ERROR", // kLogLevelError --> Logger.Level.ERROR
246-
"NONE", // kLogLevelAssert --> Logger.Level.NONE
244+
"DEBUG", // kLogLevelVerbose --> Logger.Level.DEBUG
245+
"DEBUG", // kLogLevelDebug --> Logger.Level.DEBUG
246+
"INFO", // kLogLevelInfo --> Logger.Level.INFO
247+
"WARN", // kLogLevelWarning --> Logger.Level.WARN
248+
"ERROR", // kLogLevelError --> Logger.Level.ERROR
249+
"NONE", // kLogLevelAssert --> Logger.Level.NONE
247250
};
248251

249252
bool DatabaseInternal::Initialize(App* app) {
@@ -462,7 +465,8 @@ DatabaseReference DatabaseInternal::GetReference(const char* path) const {
462465
path_string);
463466
env->DeleteLocalRef(path_string);
464467
if (database_reference_obj == nullptr) {
465-
LogWarning("Database::GetReference(): Invalid path specified: %s", path);
468+
logger_.LogWarning("Database::GetReference(): Invalid path specified: %s",
469+
path);
466470
util::CheckAndClearJniExceptions(env);
467471
return DatabaseReference(nullptr);
468472
}
@@ -482,7 +486,7 @@ DatabaseReference DatabaseInternal::GetReferenceFromUrl(const char* url) const {
482486
url_string);
483487
env->DeleteLocalRef(url_string);
484488
if (database_reference_obj == nullptr) {
485-
LogWarning(
489+
logger_.LogWarning(
486490
"Database::GetReferenceFromUrl(): URL '%s' does not match the "
487491
"Database URL.",
488492
url);
@@ -530,27 +534,26 @@ void DatabaseInternal::set_log_level(LogLevel log_level) {
530534
(sizeof(kCppLogLevelToLoggerLevelName) /
531535
sizeof(kCppLogLevelToLoggerLevelName[0])));
532536
JNIEnv* env = app_->GetJNIEnv();
533-
jstring enum_name = env->NewStringUTF(
534-
kCppLogLevelToLoggerLevelName[log_level]);
537+
jstring enum_name =
538+
env->NewStringUTF(kCppLogLevelToLoggerLevelName[log_level]);
535539
if (!util::CheckAndClearJniExceptions(env)) {
536540
jobject log_level_enum_obj = env->CallStaticObjectMethod(
537541
logger_level::GetClass(),
538542
logger_level::GetMethodId(logger_level::kValueOf), enum_name);
539543
if (!util::CheckAndClearJniExceptions(env)) {
540544
env->CallVoidMethod(
541-
obj_,
542-
firebase_database::GetMethodId(firebase_database::kSetLogLevel),
545+
obj_, firebase_database::GetMethodId(firebase_database::kSetLogLevel),
543546
log_level_enum_obj);
544547
if (!util::CheckAndClearJniExceptions(env)) {
545-
log_level_ = log_level;
548+
logger_.SetLogLevel(log_level);
546549
}
547550
env->DeleteLocalRef(log_level_enum_obj);
548551
}
549552
env->DeleteLocalRef(enum_name);
550553
}
551554
}
552555

553-
LogLevel DatabaseInternal::log_level() const { return log_level_; }
556+
LogLevel DatabaseInternal::log_level() const { return logger_.GetLogLevel(); }
554557

555558
Error DatabaseInternal::ErrorFromResultAndErrorCode(
556559
util::FutureResult result_code, jint error_code) const {

database/src/android/database_android.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@
1616
#define FIREBASE_DATABASE_CLIENT_CPP_SRC_ANDROID_DATABASE_ANDROID_H_
1717

1818
#include <jni.h>
19+
1920
#include <map>
2021
#include <set>
2122
#include <vector>
23+
2224
#include "app/src/cleanup_notifier.h"
2325
#include "app/src/future_manager.h"
2426
#include "app/src/include/firebase/app.h"
2527
#include "app/src/include/firebase/log.h"
28+
#include "app/src/logger.h"
2629
#include "app/src/mutex.h"
2730
#include "app/src/util_android.h"
2831
#include "database/src/android/database_reference_android.h"
@@ -178,6 +181,8 @@ class DatabaseInternal {
178181
// The url that was passed to the constructor.
179182
const std::string& constructor_url() const { return constructor_url_; }
180183

184+
Logger* logger() { return &logger_; }
185+
181186
private:
182187
static bool Initialize(App* app);
183188
static void ReleaseClasses(App* app);
@@ -216,7 +221,7 @@ class DatabaseInternal {
216221
// We keep it so that we can find the database in our cache.
217222
std::string constructor_url_;
218223

219-
LogLevel log_level_;
224+
Logger logger_;
220225
};
221226

222227
} // namespace internal

database/src/android/mutable_data_android.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "database/src/android/mutable_data_android.h"
1616

1717
#include <jni.h>
18+
1819
#include "app/src/util_android.h"
1920
#include "database/src/android/database_android.h"
2021
#include "database/src/android/util_android.h"
@@ -192,7 +193,7 @@ void MutableDataInternal::SetValue(Variant value) {
192193
void MutableDataInternal::SetPriority(Variant priority) {
193194
JNIEnv* env = db_->GetApp()->GetJNIEnv();
194195
if (!IsValidPriority(priority)) {
195-
LogError(
196+
db_->logger()->LogError(
196197
"MutableData::SetPriority(): Invalid Variant type given for priority. "
197198
"Container types (Vector/Map) are not allowed.");
198199
} else {

database/src/android/query_android.cc

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
// limitations under the License.
1414

1515
#include "database/src/android/query_android.h"
16-
#include "database/src/common/query.h"
1716

1817
#include <jni.h>
18+
1919
#include "app/src/util_android.h"
2020
#include "database/src/android/database_android.h"
2121
#include "database/src/android/database_reference_android.h"
22+
#include "database/src/common/query.h"
2223
#include "database/src/common/query_spec.h"
2324

2425
namespace firebase {
@@ -270,8 +271,9 @@ QueryInternal* QueryInternal::LimitToLast(size_t limit) {
270271
}
271272

272273
QueryInternal* QueryInternal::StartAt(Variant value) {
274+
Logger* logger = db_->logger();
273275
if (!value.is_numeric() && !value.is_string() && !value.is_bool()) {
274-
LogWarning(
276+
logger->LogWarning(
275277
"Query::StartAt(): Only strings, numbers, and boolean values are "
276278
"allowed. (URL = %s)",
277279
query_spec_.path.c_str());
@@ -304,8 +306,9 @@ QueryInternal* QueryInternal::StartAt(Variant value) {
304306
}
305307

306308
QueryInternal* QueryInternal::StartAt(Variant value, const char* key) {
309+
Logger* logger = db_->logger();
307310
if (!value.is_numeric() && !value.is_string() && !value.is_bool()) {
308-
LogWarning(
311+
logger->LogWarning(
309312
"Query::StartAt: Only strings, numbers, and boolean values are "
310313
"allowed. (URL = %s)",
311314
query_spec_.path.c_str());
@@ -344,8 +347,9 @@ QueryInternal* QueryInternal::StartAt(Variant value, const char* key) {
344347
}
345348

346349
QueryInternal* QueryInternal::EndAt(Variant value) {
350+
Logger* logger = db_->logger();
347351
if (!value.is_numeric() && !value.is_string() && !value.is_bool()) {
348-
LogWarning(
352+
logger->LogWarning(
349353
"Query::EndAt: Only strings, numbers, and boolean values are "
350354
"allowed. (URL = %s)",
351355
query_spec_.path.c_str());
@@ -378,8 +382,9 @@ QueryInternal* QueryInternal::EndAt(Variant value) {
378382
}
379383

380384
QueryInternal* QueryInternal::EndAt(Variant value, const char* key) {
385+
Logger* logger = db_->logger();
381386
if (!value.is_numeric() && !value.is_string() && !value.is_bool()) {
382-
LogWarning(
387+
logger->LogWarning(
383388
"Query::EndAt: Only strings, numbers, and boolean values are "
384389
"allowed. (URL = %s)",
385390
query_spec_.path.c_str());
@@ -418,8 +423,9 @@ QueryInternal* QueryInternal::EndAt(Variant value, const char* key) {
418423
}
419424

420425
QueryInternal* QueryInternal::EqualTo(Variant value) {
426+
Logger* logger = db_->logger();
421427
if (!value.is_numeric() && !value.is_string() && !value.is_bool()) {
422-
LogWarning(
428+
logger->LogWarning(
423429
"Query::EqualTo: Only strings, numbers, and boolean values are "
424430
"allowed. (URL = %s)",
425431
query_spec_.path.c_str());
@@ -452,8 +458,9 @@ QueryInternal* QueryInternal::EqualTo(Variant value) {
452458
}
453459

454460
QueryInternal* QueryInternal::EqualTo(Variant value, const char* key) {
461+
Logger* logger = db_->logger();
455462
if (!value.is_numeric() && !value.is_string() && !value.is_bool()) {
456-
LogWarning(
463+
logger->LogWarning(
457464
"Query::EqualTo: Only strings, numbers, and boolean values are "
458465
"allowed. (URL = %s)",
459466
query_spec_.path.c_str());
@@ -574,7 +581,8 @@ void QueryInternal::AddValueListener(ValueListener* value_listener) {
574581
"Query::AddValueListener (URL = %s) failed",
575582
query_spec_.path.c_str());
576583
} else {
577-
LogWarning(
584+
Logger* logger = db_->logger();
585+
logger->LogWarning(
578586
"Query::AddValueListener (URL = %s): You may not register the same "
579587
"ValueListener more than once on the same Query.",
580588
query_spec_.path.c_str());
@@ -622,7 +630,8 @@ void QueryInternal::AddChildListener(ChildListener* child_listener) {
622630
"Query::AddChildListener (URL = %s) failed",
623631
query_spec_.path.c_str());
624632
} else {
625-
LogWarning(
633+
Logger* logger = db_->logger();
634+
logger->LogWarning(
626635
"Query::AddChildListener (URL = %s): You may not register the same "
627636
"ChildListener more than once on the same Query.",
628637
query_spec_.path.c_str());

database/src/common/database.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <map>
2020
#include <string>
2121

22+
#include "app/src/app_common.h"
2223
#include "app/src/assert.h"
2324
#include "app/src/cleanup_notifier.h"
2425
#include "app/src/include/firebase/app.h"
@@ -108,7 +109,8 @@ Database::Database(::firebase::App* app, internal::DatabaseInternal* internal)
108109
assert(app_notifier);
109110
app_notifier->RegisterObject(this, [](void* object) {
110111
Database* database = reinterpret_cast<Database*>(object);
111-
LogWarning(
112+
Logger* logger = app_common::FindAppLoggerByName(database->app()->name());
113+
logger->LogWarning(
112114
"Database object 0x%08x should be deleted before the App 0x%08x it "
113115
"depends upon.",
114116
static_cast<int>(reinterpret_cast<intptr_t>(database)),

0 commit comments

Comments
 (0)