Skip to content

Commit 8b401ca

Browse files
feat: update logging behavior for Optimizely SDK
- Remove unused log level property in CustomLogger - Implement channel setter method in OptimizelyFlutterLogger - Add guard clauses for levels and logger channel availability in log method - Update channel invocation to happen on main thread - Set log level in SwiftOptimizelyFlutterSdkPlugin based on parameters - Simplify DefaultOptimizelyLogger log method - Update log message formatting in logger bridge for consistency
1 parent 40cfdaa commit 8b401ca

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

example/lib/custom_logger.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ import 'package:optimizely_flutter_sdk/optimizely_flutter_sdk.dart';
22
import 'package:flutter/foundation.dart';
33

44
class CustomLogger implements OptimizelyLogger {
5-
@override
6-
OptimizelyLogLevel logLevel = OptimizelyLogLevel.debug;
7-
85
@override
96
void log(OptimizelyLogLevel level, String message) {
107
if (kDebugMode) {

ios/Classes/OptimizelyFlutterLogger.swift

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,43 @@ import Optimizely
44
public class OptimizelyFlutterLogger: NSObject, OPTLogger {
55
public static var logLevel: OptimizelyLogLevel = .info
66

7-
private static let loggerChannel = FlutterMethodChannel(
8-
name: "optimizely_flutter_sdk_logger",
9-
binaryMessenger: SwiftOptimizelyFlutterSdkPlugin.registrar?.messenger() ?? FlutterEngine().binaryMessenger
10-
)
7+
private static var loggerChannel: FlutterMethodChannel?
118

129
public required override init() {
1310
super.init()
1411
}
1512

13+
public static func setChannel(_ channel: FlutterMethodChannel) {
14+
loggerChannel = channel
15+
}
16+
1617
public func log(level: OptimizelyLogLevel, message: String) {
17-
// Ensure we're on the main thread when calling Flutter
18-
DispatchQueue.main.async {
19-
Self.loggerChannel.invokeMethod("log", arguments: [
18+
// Early return if level check fails
19+
guard level.rawValue <= OptimizelyFlutterLogger.logLevel.rawValue else {
20+
return
21+
}
22+
23+
// Ensure we have a valid channel
24+
guard let channel = Self.loggerChannel else {
25+
print("[OptimizelyFlutterLogger] ERROR: No logger channel available!")
26+
return
27+
}
28+
29+
// Ensure logging happens on main thread as FlutterMethodChannel requires it
30+
if Thread.isMainThread {
31+
// Already on main thread
32+
channel.invokeMethod("log", arguments: [
2033
"level": level.rawValue,
2134
"message": message
2235
])
36+
} else {
37+
// Switch to main thread
38+
DispatchQueue.main.sync {
39+
channel.invokeMethod("log", arguments: [
40+
"level": level.rawValue,
41+
"message": message
42+
])
43+
}
2344
}
2445
}
2546
}

ios/Classes/SwiftOptimizelyFlutterSdkPlugin.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public class SwiftOptimizelyFlutterSdkPlugin: NSObject, FlutterPlugin {
112112
var defaultLogLevel = OptimizelyLogLevel.info
113113
if let logLevel = parameters[RequestParameterKey.defaultLogLevel] as? String {
114114
defaultLogLevel = Utils.getDefaultLogLevel(logLevel)
115+
OptimizelyFlutterLogger.logLevel = defaultLogLevel
115116
}
116117

117118
// SDK Settings Default Values

lib/src/logger/flutter_logger.dart

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,13 @@
11
import 'package:optimizely_flutter_sdk/src/data_objects/log_level.dart';
22

33
abstract class OptimizelyLogger {
4-
/// The log level for the logger
5-
OptimizelyLogLevel get logLevel;
6-
set logLevel(OptimizelyLogLevel level);
7-
84
/// Log a message at a certain level
95
void log(OptimizelyLogLevel level, String message);
106
}
117

128
class DefaultOptimizelyLogger implements OptimizelyLogger {
13-
@override
14-
OptimizelyLogLevel logLevel = OptimizelyLogLevel.info;
15-
169
@override
1710
void log(OptimizelyLogLevel level, String message) {
18-
if (_shouldLog(level)) {
19-
print('[Optimizely ${level.name.toUpperCase()}] $message');
20-
}
21-
}
22-
23-
bool _shouldLog(OptimizelyLogLevel messageLevel) {
24-
return messageLevel.index <= logLevel.index;
11+
print('[Optimizely ${level.name}] $message');
2512
}
2613
}

lib/src/logger/logger_bridge.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class LoggerBridge {
5252
if (_customLogger != null) {
5353
_customLogger!.log(level, message);
5454
} else {
55-
print('[Optimizely ${level.name.toUpperCase()}] $message');
55+
print('[Optimizely ${level.name}] $message');
5656
}
5757
} catch (e) {
5858
print('[LoggerBridge] Error processing log call: $e');

0 commit comments

Comments
 (0)