|  | 
| 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