diff --git a/Realm/RLMLogger.mm b/Realm/RLMLogger.mm index 56dee6d8f6..0931653c91 100644 --- a/Realm/RLMLogger.mm +++ b/Realm/RLMLogger.mm @@ -75,53 +75,47 @@ static RLMLogLevel logLevelForLevel(Level logLevel) { REALM_UNREACHABLE(); // Unrecognized log level. } -static NSArray *categories = [NSArray arrayWithObjects: - @"Realm", - @"Realm.SDK", - @"Realm.App", - @"Realm.Storage", - @"Realm.Storage.Transaction", - @"Realm.Storage.Query", - @"Realm.Storage.Object", - @"Realm.Storage.Notification", - @"Realm.Sync", - @"Realm.Sync.Client", - @"Realm.Sync.Client.Session", - @"Realm.Sync.Client.Changeset", - @"Realm.Sync.Client.Network", - @"Realm.Sync.Client.Reset", - @"Realm.Sync.Server", - nil]; - -static std::string categoryNameForLogCategory(RLMLogCategory logCategory) { - if (logCategory < [categories count]) { - if (auto categoryName = [categories objectAtIndex:logCategory]) { - return categoryName.UTF8String; - } - } +static LogCategory& categoryForLogCategory(RLMLogCategory logCategory) { + switch (logCategory) { + case RLMLogCategoryRealm: return LogCategory::realm; + case RLMLogCategoryRealmSDK: return LogCategory::sdk; + case RLMLogCategoryRealmApp: return LogCategory::app; + case RLMLogCategoryRealmStorage: return LogCategory::storage; + case RLMLogCategoryRealmStorageTransaction: return LogCategory::transaction; + case RLMLogCategoryRealmStorageQuery: return LogCategory::query; + case RLMLogCategoryRealmStorageObject: return LogCategory::object; + case RLMLogCategoryRealmStorageNotification: return LogCategory::notification; + case RLMLogCategoryRealmSync: return LogCategory::sync; + case RLMLogCategoryRealmSyncClient: return LogCategory::client; + case RLMLogCategoryRealmSyncClientSession: return LogCategory::session; + case RLMLogCategoryRealmSyncClientChangeset: return LogCategory::changeset; + case RLMLogCategoryRealmSyncClientNetwork: return LogCategory::network; + case RLMLogCategoryRealmSyncClientReset: return LogCategory::reset; + case RLMLogCategoryRealmSyncServer: return LogCategory::server; + }; REALM_UNREACHABLE(); } static RLMLogCategory logCategoryForCategoryName(std::string category) { - auto index = [categories indexOfObject:RLMStringDataToNSString(category)]; - if (index != NSNotFound) { - switch (index) { - case 0: return RLMLogCategoryRealm; - case 1: return RLMLogCategoryRealmSDK; - case 2: return RLMLogCategoryRealmApp; - case 3: return RLMLogCategoryRealmStorage; - case 4: return RLMLogCategoryRealmStorageTransaction; - case 5: return RLMLogCategoryRealmStorageQuery; - case 6: return RLMLogCategoryRealmStorageObject; - case 7: return RLMLogCategoryRealmStorageNotification; - case 8: return RLMLogCategoryRealmSync; - case 9: return RLMLogCategoryRealmSyncClient; - case 10: return RLMLogCategoryRealmSyncClientSession; - case 11: return RLMLogCategoryRealmSyncClientChangeset; - case 12: return RLMLogCategoryRealmSyncClientNetwork; - case 13: return RLMLogCategoryRealmSyncClientReset; - case 14: return RLMLogCategoryRealmSyncServer; - } + NSDictionary *categories = @{ + @"Realm": @(RLMLogCategoryRealm), + @"Realm.SDK": @(RLMLogCategoryRealmSDK), + @"Realm.App": @(RLMLogCategoryRealmApp), + @"Realm.Storage": @(RLMLogCategoryRealmStorage), + @"Realm.Storage.Transaction": @(RLMLogCategoryRealmStorageTransaction), + @"Realm.Storage.Query": @(RLMLogCategoryRealmStorageQuery), + @"Realm.Storage.Object": @(RLMLogCategoryRealmStorageObject), + @"Realm.Storage.Notification": @(RLMLogCategoryRealmStorageNotification), + @"Realm.Sync": @(RLMLogCategoryRealmSync), + @"Realm.Sync.Client": @(RLMLogCategoryRealmSyncClient), + @"Realm.Sync.Client.Session": @(RLMLogCategoryRealmSyncClientSession), + @"Realm.Sync.Client.Changeset": @(RLMLogCategoryRealmSyncClientChangeset), + @"Realm.Sync.Client.Network": @(RLMLogCategoryRealmSyncClientNetwork), + @"Realm.Sync.Client.Reset": @(RLMLogCategoryRealmSyncClientReset), + @"Realm.Sync.Server": @(RLMLogCategoryRealmSyncServer) + }; + if (NSNumber *logCategory = [categories objectForKey:RLMStringDataToNSString(category)]) { + return RLMLogCategory([logCategory intValue]); } REALM_UNREACHABLE(); } @@ -210,10 +204,9 @@ - (void)logWithLevel:(RLMLogLevel)logLevel message:(NSString *)message, ... { - (void)logWithLevel:(RLMLogLevel)logLevel category:(RLMLogCategory)category message:(NSString *)message { auto level = levelForLogLevel(logLevel); - auto cat = categoryNameForLogCategory(category); - LogCategory& lcat = LogCategory::get_category(cat); - if (_logger->would_log(lcat, level)) { - _logger->log(lcat, levelForLogLevel(logLevel), message.UTF8String); + LogCategory& cat = categoryForLogCategory(category); + if (_logger->would_log(cat, level)) { + _logger->log(cat, levelForLogLevel(logLevel), message.UTF8String); } } @@ -227,12 +220,12 @@ - (void)logWithLevel:(RLMLogLevel)logLevel categoryName:(NSString *)categoryName + (void)setLevel:(RLMLogLevel)level forCategory:(RLMLogCategory)category { auto defaultLogger = Logger::get_default_logger(); - defaultLogger->set_level_threshold(categoryNameForLogCategory(category), levelForLogLevel(level)); + defaultLogger->set_level_threshold(categoryForLogCategory(category).get_name(), levelForLogLevel(level)); } + (RLMLogLevel)levelForCategory:(RLMLogCategory)category { auto defaultLogger = Logger::get_default_logger(); - return logLevelForLevel(defaultLogger->get_level_threshold(categoryNameForLogCategory(category))); + return logLevelForLevel(defaultLogger->get_level_threshold(categoryForLogCategory(category).get_name())); } #pragma mark Testing diff --git a/Realm/Tests/SwiftUISyncTestHost/ContentView.swift b/Realm/Tests/SwiftUISyncTestHost/ContentView.swift index 061615a08b..e7d22b17fb 100644 --- a/Realm/Tests/SwiftUISyncTestHost/ContentView.swift +++ b/Realm/Tests/SwiftUISyncTestHost/ContentView.swift @@ -198,7 +198,7 @@ class LoginHelper: ObservableObject { private let appConfig = AppConfiguration(baseURL: "http://localhost:9090") func login(email: String, password: String, completion: @escaping (User) -> Void) { - Logger.shared.setLogLevel(.all, category: Category.Realm) + Logger.setLogLevel(.all, for: Category.realm) let app = RealmSwift.App(id: ProcessInfo.processInfo.environment["app_id"]!, configuration: appConfig) app.login(credentials: .emailPassword(email: email, password: password)) .receive(on: DispatchQueue.main) diff --git a/RealmSwift/Logger.swift b/RealmSwift/Logger.swift index bb939232ef..e5c265a518 100644 --- a/RealmSwift/Logger.swift +++ b/RealmSwift/Logger.swift @@ -47,7 +47,7 @@ import Realm.Private Logger.shared = logger ``` - - note: By default log threshold level is `.info`, for the log category `.Category.realm`, + - note: The default log threshold level is `.info`, for the log category `.Category.realm`, and logging strings are output to Apple System Logger. - SeeAlso: `LogCategory` */ @@ -67,7 +67,7 @@ extension Logger { - parameter category: The log category for the message. - parameter message: The message to log. */ - internal func log(level: LogLevel, category: LogCategory = Category.realm, message: String) { + internal func log(level: LogLevel, category: LogCategory = Category.sdk, message: String) { self.log(with: level, category: ObjectiveCSupport.convert(value: category), message: message) } @@ -175,21 +175,6 @@ public enum Category: String, LogCategory { /// Log category for all app related logs. case app = "Realm.App" - /// :nodoc: - fileprivate static func fromString(_ string: String) -> LogCategory? { - if let category = Category(rawValue: string) { - return category - } else if let storage = Storage(rawValue: string) { - return storage - } else if let sync = Sync(rawValue: string) { - return sync - } else if let client = Sync.Client(rawValue: string) { - return client - } else { - return nil - } - } - /** Log category for all storage related logs. @@ -240,11 +225,11 @@ public enum Category: String, LogCategory { Category hierarchy: ``` - Storage - ├─► Transaction - ├─► Query - ├─► Object - └─► Notification + Client + ├─► Session + ├─► Changeset + ├─► Network + └─► Reset ``` */ public enum Client: String, LogCategory {