Skip to content

Commit

Permalink
Restore the ability to get and set log levels for a specific logger
Browse files Browse the repository at this point in the history
  • Loading branch information
tgoyne committed Jul 6, 2024
1 parent e4a59ca commit 5861924
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 87 deletions.
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ x.y.z Release notes (yyyy-MM-dd)
* Added support for filtering logs by category. Users wil have more fine grained control over
the log level for each category as well.
```swift
Logger.setLogLevel(.info, category: Category.Storage.transactions)
Logger.shared.set(logLevel: .info, category: Category.Storage.transactions)
```

### Fixed
Expand All @@ -13,8 +13,8 @@ x.y.z Release notes (yyyy-MM-dd)

### Deprecations
* `RLMLogger.level`/`Logger.level` has been deprecated in favor of using
`RLMLogger.setLevel:forCategory:`/`Logger.setLevel(:category:)` and
`RLMLogger.getLevelForCategory:`/`Logger.getLevel(for:)`.
`RLMLogger.setLevel:forCategory:`/`Logger.set(logLevel:category:)` and
`RLMLogger.levelForCategory:`/`Logger.logLevel(for:)`.
* It is not recommended to initialize a `RLMLogger/Logger` with a level anymore.

### Compatibility
Expand Down
2 changes: 1 addition & 1 deletion Realm/ObjectServerTests/RLMSyncTestCase.mm
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,7 @@ + (void)setUp {
if ([RealmServer haveServer]) {
(void)[RealmServer shared];
}
[RLMLogger.defaultLogger setLevel:RLMLogLevelWarn forCategory:RLMLogCategorySync];
}

- (void)setUp {
Expand Down Expand Up @@ -613,7 +614,6 @@ - (RLMApp *)appWithId:(NSString *)appId {
RLMApp *app = [RLMApp appWithConfiguration:config];
RLMSyncManager *syncManager = app.syncManager;
syncManager.userAgent = self.name;
[RLMLogger setLevel:RLMLogLevelWarn forCategory:RLMLogCategorySync];
return app;
}

Expand Down
8 changes: 4 additions & 4 deletions Realm/RLMLogger.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,20 +168,20 @@ __attribute__((deprecated("Use `initWithLogFunction:` instead.")));
@property (class) RLMLogger *defaultLogger NS_SWIFT_NAME(shared);

/**
Sets the gobal log level for a given category.
Sets the log level for a given category.
@param level The log level to be set for the logger.
@param category The log function which will be invoked whenever there is a log message.
*/
+ (void)setLevel:(RLMLogLevel)level forCategory:(RLMLogCategory)category NS_REFINED_FOR_SWIFT;
- (void)setLevel:(RLMLogLevel)level forCategory:(RLMLogCategory)category NS_REFINED_FOR_SWIFT;

/**
Gets the global log level for the specified category.
Gets the log level for the specified category.
@param category The log category which we need the level.
@returns The log level for the specified category
*/
+ (RLMLogLevel)levelForCategory:(RLMLogCategory)category NS_REFINED_FOR_SWIFT;
- (RLMLogLevel)levelForCategory:(RLMLogCategory)category NS_REFINED_FOR_SWIFT;

@end

Expand Down
12 changes: 5 additions & 7 deletions Realm/RLMLogger.mm
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ + (void)initialize {

- (instancetype)initWithLogger:(std::shared_ptr<Logger>)logger {
if (self = [self init]) {
self->_logger = logger;
self->_logger = std::move(logger);
}
return self;
}
Expand All @@ -202,14 +202,12 @@ - (instancetype)initWithLogFunction:(RLMLogCategoryFunction)logFunction {
return self;
}

+ (void)setLevel:(RLMLogLevel)level forCategory:(RLMLogCategory)category {
auto defaultLogger = Logger::get_default_logger();
defaultLogger->set_level_threshold(categoryForLogCategory(category).get_name(), levelForLogLevel(level));
- (void)setLevel:(RLMLogLevel)level forCategory:(RLMLogCategory)category {
_logger->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(categoryForLogCategory(category).get_name()));
- (RLMLogLevel)levelForCategory:(RLMLogCategory)category {
return logLevelForLevel(_logger->get_level_threshold(categoryForLogCategory(category).get_name()));
}

#pragma mark Testing
Expand Down
22 changes: 11 additions & 11 deletions Realm/Tests/RealmTests.mm
Original file line number Diff line number Diff line change
Expand Up @@ -2968,16 +2968,16 @@ - (void)testSetDefaultLogLevel {
}];
RLMLogger.defaultLogger = logger;

[RLMLogger setLevel:RLMLogLevelAll forCategory:category];
[logger setLevel:RLMLogLevelAll forCategory:category];
@autoreleasepool { [RLMRealm defaultRealm]; }
XCTAssertEqual([RLMLogger levelForCategory:category], RLMLogLevelAll);
XCTAssertEqual([logger levelForCategory:category], RLMLogLevelAll);
XCTAssertTrue([logs containsString:@"5 DB:"]); // Detail
XCTAssertTrue([logs containsString:@"7 DB:"]); // Trace

[logs setString: @""];
[RLMLogger setLevel:RLMLogLevelDetail forCategory:category];
[logger setLevel:RLMLogLevelDetail forCategory:category];
@autoreleasepool { [RLMRealm defaultRealm]; }
XCTAssertEqual([RLMLogger levelForCategory:category], RLMLogLevelDetail);
XCTAssertEqual([logger levelForCategory:category], RLMLogLevelDetail);
XCTAssertTrue([logs containsString:@"5 DB:"]); // Detail
XCTAssertFalse([logs containsString:@"7 DB:"]); // Trace
}
Expand All @@ -2989,21 +2989,21 @@ - (void)testDefaultLogger {
[logs appendFormat:@" %@ %lu %lu %@", [NSDate date], (unsigned long)category, level, message];
}];
RLMLogger.defaultLogger = logger;
[RLMLogger setLevel:RLMLogLevelOff forCategory:category];
XCTAssertEqual([RLMLogger levelForCategory:category], RLMLogLevelOff);
[logger setLevel:RLMLogLevelOff forCategory:category];
XCTAssertEqual([logger levelForCategory:category], RLMLogLevelOff);

@autoreleasepool { [RLMRealm defaultRealm]; }
XCTAssertTrue([logs length] == 0);

// Test LogLevel Detail
[RLMLogger setLevel:RLMLogLevelDetail forCategory:category];
[logger setLevel:RLMLogLevelDetail forCategory:category];
@autoreleasepool { [RLMRealm defaultRealm]; }
XCTAssertTrue([logs length] > 0);
XCTAssertTrue([logs containsString:@"5 DB:"]); // Detail
XCTAssertFalse([logs containsString:@"7 DB:"]); // Trace

// Test LogLevel All
[RLMLogger setLevel:RLMLogLevelAll forCategory:category];
[logger setLevel:RLMLogLevelAll forCategory:category];
@autoreleasepool { [RLMRealm defaultRealm]; }
XCTAssertTrue([logs length] > 0);
XCTAssertTrue([logs containsString:@"5 DB:"]); // Detail
Expand All @@ -3014,8 +3014,8 @@ - (void)testDefaultLogger {
RLMLogger.defaultLogger = [[RLMLogger alloc] initWithLogFunction:^(RLMLogLevel level, RLMLogCategory category, NSString * message) {
[logs appendFormat:@" %@ %lu %lu %@", [NSDate date], (unsigned long)category, level, message];
}];
[RLMLogger setLevel:RLMLogLevelDebug forCategory:category];
XCTAssertEqual([RLMLogger levelForCategory:category], RLMLogLevelDebug);
[RLMLogger.defaultLogger setLevel:RLMLogLevelDebug forCategory:category];
XCTAssertEqual([RLMLogger.defaultLogger levelForCategory:category], RLMLogLevelDebug);
@autoreleasepool { [RLMRealm defaultRealm]; }
XCTAssertTrue([logs containsString:@"5 DB:"]); // Detail
XCTAssertFalse([logs containsString:@"7 DB:"]); // Trace
Expand Down Expand Up @@ -3104,7 +3104,7 @@ - (void)testSyncConnectionMetrics {
[logs appendFormat:@" %@ %lu %lu %@", [NSDate date], (unsigned long)category, level, message];
}];
RLMLogger.defaultLogger = logger;
[RLMLogger setLevel:RLMLogLevelAll forCategory:category];
[logger setLevel:RLMLogLevelAll forCategory:category];
RLMApp *app = [RLMApp appWithId:@"test-id"];
// We don't even need the login to succeed, we only want for the logger
// to log the values on device info after trying to login.
Expand Down
2 changes: 1 addition & 1 deletion Realm/Tests/SwiftUISyncTestHost/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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.setLogLevel(.all, for: Category.realm)
Logger.shared.set(logLevel: .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)
Expand Down
20 changes: 10 additions & 10 deletions RealmSwift/Logger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ import Realm.Private
Set the global log level for a given category.
```swift
Logger.setLogLevel(.info, for: Category.sdk)
Logger.shared.set(logLevel: .info, for: Category.sdk)
```
Read the global log level for a given category.
```swift
let level = Logger.logLevel(for: Category.Storage.all)
let level = Logger.shared.logLevel(for: Category.Storage.all)
```
You can define your own custom logger creating an instance of `Logger` and defining the log function which will be
Expand Down Expand Up @@ -72,7 +72,7 @@ extension Logger {
self.init(logFunction: { level, category, message in
function(level, ObjectiveCSupport.convert(value: category), message)
})
Logger.setLogLevel(level, for: Category.realm)
set(logLevel: level, for: Category.realm)
}

/**
Expand All @@ -93,28 +93,28 @@ extension Logger {
}

/**
Sets the global log level for a given log category.
Sets the log level for a given log category.
- parameter level: The log level to be set for the logger.
- parameter logLevel: The log level to be set for the logger.
- parameter category: The log category to be set for the logger, by default it will setup the top Category `Category.realm`
- note:By setting the log level of a category, it will set all its subcategories log level as well.
- SeeAlso: `LogCategory`
*/
public static func setLogLevel(_ level: LogLevel, for category: LogCategory = Category.realm) {
Logger.__setLevel(level, for: ObjectiveCSupport.convert(value: category))
public func set(logLevel: LogLevel, for category: LogCategory = Category.realm) {
__setLevel(logLevel, for: ObjectiveCSupport.convert(value: category))
}

/**
Gets the current global log level of a log category.
Gets the current log level of a log category.
- parameter category: The target log category.
- returns: The `LogLevel` for the given category.
- SeeAlso: `LogCategory`
*/
public static func logLevel(for category: LogCategory) -> LogLevel {
Logger.__level(for: ObjectiveCSupport.convert(value: category))
public func logLevel(for category: LogCategory) -> LogLevel {
__level(for: ObjectiveCSupport.convert(value: category))
}
}

Expand Down
Loading

0 comments on commit 5861924

Please sign in to comment.