|
32 | 32 |
|
33 | 33 | import io.flutter.embedding.engine.plugins.activity.ActivityAware; |
34 | 34 |
|
| 35 | +import org.slf4j.LoggerFactory; |
| 36 | + |
| 37 | +import ch.qos.logback.classic.Logger; |
| 38 | +import ch.qos.logback.classic.LoggerContext; |
| 39 | +import ch.qos.logback.classic.spi.ILoggingEvent; |
| 40 | +import ch.qos.logback.core.Appender; |
| 41 | + |
| 42 | + |
35 | 43 | /** OptimizelyFlutterSdkPlugin */ |
36 | 44 | public class OptimizelyFlutterSdkPlugin extends OptimizelyFlutterClient implements FlutterPlugin, ActivityAware, MethodCallHandler { |
37 | 45 |
|
38 | 46 | public static MethodChannel channel; |
| 47 | + private Appender<ILoggingEvent> flutterLogbackAppender; |
39 | 48 |
|
40 | 49 | @Override |
41 | 50 | public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { |
@@ -157,11 +166,32 @@ public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { |
157 | 166 | channel = new MethodChannel(binding.getBinaryMessenger(), "optimizely_flutter_sdk"); |
158 | 167 | channel.setMethodCallHandler(this); |
159 | 168 | context = binding.getApplicationContext(); |
| 169 | + |
| 170 | + MethodChannel loggerChannel = new MethodChannel(binding.getBinaryMessenger(), FlutterLogbackAppender.CHANNEL_NAME); |
| 171 | + FlutterLogbackAppender.setChannel(loggerChannel); |
| 172 | + |
| 173 | + // Add appender to logback |
| 174 | + flutterLogbackAppender = new FlutterLogbackAppender(); |
| 175 | + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); |
| 176 | + flutterLogbackAppender.setContext(lc); |
| 177 | + flutterLogbackAppender.start(); |
| 178 | + Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); |
| 179 | + rootLogger.setLevel(ch.qos.logback.classic.Level.ALL); |
| 180 | + rootLogger.addAppender(flutterLogbackAppender); |
160 | 181 | } |
161 | 182 |
|
162 | 183 | @Override |
163 | 184 | public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { |
164 | 185 | channel.setMethodCallHandler(null); |
| 186 | + // Stop and detach the appender |
| 187 | + if (flutterLogbackAppender != null) { |
| 188 | + Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); |
| 189 | + rootLogger.detachAppender(flutterLogbackAppender); |
| 190 | + flutterLogbackAppender.stop(); |
| 191 | + flutterLogbackAppender = null; |
| 192 | + } |
| 193 | + // Clean up the channel |
| 194 | + FlutterLogbackAppender.setChannel(null); |
165 | 195 | } |
166 | 196 |
|
167 | 197 | @Override |
|
0 commit comments