背景
在之前使用Flutter開發(fā)的時候魔眨,日志輸出只能用print()和debugprint(),然而這兩個輸出的日志都是info級別的日志,根本毫無日志分層而言踱阿,調(diào)試起來很不方便泽疆!
想法
使用Flutter調(diào)用Android和iOS的原生日志
分析
在Flutter中可以使用MethodChannel來調(diào)用原生的api
實施
Flutter
class LogUtils {
static const perform = const MethodChannel("android_log");
static void v(String tag, String message) {
perform.invokeMethod('logV', {'tag': tag, 'msg': message});
}
static void d(String tag, String message) {
perform.invokeMethod('logD', {'tag': tag, 'msg': message});
}
static void i(String tag, String message) {
perform.invokeMethod('logI', {'tag': tag, 'msg': message});
}
static void w(String tag, String message) {
perform.invokeMethod('logW', {'tag': tag, 'msg': message});
}
static void e(String tag, String message) {
perform.invokeMethod('logE', {'tag': tag, 'msg': message});
}
}
Android
class MainActivity : FlutterActivity() {
companion object {
const val FLUTTER_LOG_CHANNEL = "android_log"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
MethodChannel(flutterView, FLUTTER_LOG_CHANNEL).setMethodCallHandler { call, result ->
logPrint(call)
}
}
private fun logPrint(call: MethodCall) {
var tag: String = call.argument("tag")!!
var message: String = call.argument("msg")!!
when (call.method) {
"logV" -> Log.v(tag, message)
"logD" -> Log.d(tag, message)
"logI" -> Log.i(tag, message)
"logW" -> Log.w(tag, message)
"logE" -> Log.e(tag, message)
}
}
}
結(jié)果