[6.3.0][日志] 过滤指定Tag;并对特定Tag做check(如:ANR LOG)
This commit is contained in:
@@ -225,7 +225,7 @@ ext {
|
||||
btrace : "com.bytedance.btrace:rhea-core:2.0.0",
|
||||
|
||||
mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.11",
|
||||
log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.30",
|
||||
log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.50",
|
||||
|
||||
// 安全证书
|
||||
passport_secret : "com.zhidaoauto:sdk-java:1.0.6-SNAPSHOT",
|
||||
|
||||
@@ -47,30 +47,7 @@ internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener {
|
||||
Log.d("BLOCK", "--- onBlockReport ---: ${info.frames.size}")
|
||||
val map = mutableMapOf<String, List<String>>()
|
||||
map["frames"] = info.frames.map { "$it" }
|
||||
BlockDetector.recorder().dump(object: OnDumpListener {
|
||||
override fun OnDumped(data: Map<Int, List<String>>) {
|
||||
map["history"] = data[0] ?: emptyList()
|
||||
map["pending"] = data[1] ?: emptyList()
|
||||
val cpu = CallerDevaToolsManager.usage()?.dump()
|
||||
if (!cpu.isNullOrEmpty()) {
|
||||
val mainThreadUsage = cpu.remove("MainThreadUsage")
|
||||
val processUsage = cpu.remove("ProcessUsage")
|
||||
if (mainThreadUsage != null && processUsage != null) {
|
||||
map["cpu"] = ArrayList<String>().also {
|
||||
it.add("main-thread: ${ "%.2f".format(mainThreadUsage * 1.0f * 100 / processUsage) }% ($mainThreadUsage, $processUsage)")
|
||||
for (e in cpu.entries.sortedByDescending { e -> e.value }) {
|
||||
it.add("${e.key}: ${ "%.2f".format(e.value * 1.0f * 100 / processUsage) }% (${e.value}, $processUsage)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
VLogUtils.w("BLOCK", GsonUtils.toJson(map))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
}
|
||||
})
|
||||
dump(map)
|
||||
}
|
||||
|
||||
override fun monitor(window: Window) {
|
||||
@@ -102,4 +79,33 @@ internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener {
|
||||
override fun recorder(): IMessageRecorder {
|
||||
return BlockDetector.recorder()
|
||||
}
|
||||
|
||||
override fun dump(extra: Map<String, List<String>>?) {
|
||||
val map = mutableMapOf<String, List<String>>()
|
||||
extra?.takeIf { it.isNotEmpty() }?.also { map.putAll(it) }
|
||||
BlockDetector.recorder().dump(object: OnDumpListener {
|
||||
override fun OnDumped(data: Map<Int, List<String>>) {
|
||||
map["history"] = data[0] ?: emptyList()
|
||||
map["pending"] = data[1] ?: emptyList()
|
||||
val cpu = CallerDevaToolsManager.usage()?.dump()
|
||||
if (!cpu.isNullOrEmpty()) {
|
||||
val mainThreadUsage = cpu.remove("MainThreadUsage")
|
||||
val processUsage = cpu.remove("ProcessUsage")
|
||||
if (mainThreadUsage != null && processUsage != null) {
|
||||
map["cpu"] = ArrayList<String>().also {
|
||||
it.add("main-thread: ${ "%.2f".format(mainThreadUsage * 1.0f * 100 / processUsage) }% ($mainThreadUsage, $processUsage)")
|
||||
for (e in cpu.entries.sortedByDescending { e -> e.value }) {
|
||||
it.add("${e.key}: ${ "%.2f".format(e.value * 1.0f * 100 / processUsage) }% (${e.value}, $processUsage)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
VLogUtils.w("BLOCK", GsonUtils.toJson(map))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.zhjt.mogo_core_function_devatools.block.observer
|
||||
|
||||
import com.mogo.core.log.record.config.checker.ILogcatChecker
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
|
||||
class AnrLogcatObserver: ILogcatChecker.ILogcatCheckObserver {
|
||||
|
||||
override fun onGet() {
|
||||
CallerDevaToolsManager.block()?.dump()
|
||||
}
|
||||
}
|
||||
@@ -10,12 +10,12 @@ import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.core.log.record.*
|
||||
import com.mogo.core.log.record.config.*
|
||||
import com.mogo.core.log.record.config.crash.*
|
||||
import com.mogo.core.log.record.config.state.IStateProvider
|
||||
import com.mogo.core.log.record.model.UploadError
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.function.api.devatools.logcat.*
|
||||
import com.zhidao.loglib.bean.RemoteLogPushContent
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.checker.AnrLogChecker
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.config.LogRecordConfig
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.uploader.*
|
||||
import kotlinx.coroutines.*
|
||||
@@ -99,17 +99,12 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
|
||||
itx["协议版本号"] = AppConfigInfo.protocolVersionNumber
|
||||
itx["${divider}-7"] = divider
|
||||
itx["角色"] = AppConfigInfo.role
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
.crashConfig(CrashConfig.Builder()
|
||||
.enabled(false)
|
||||
.crashDir(File(context.getExternalFilesDir(null), "logcat/crash"))
|
||||
.javaCrash(true)
|
||||
.anr(true)
|
||||
.nativeCrash(true)
|
||||
.build())
|
||||
.ignoreTags(" OpenGLRenderer")
|
||||
.systemTags(" ActivityManager")
|
||||
.checker(AnrLogChecker())
|
||||
.uploader(LogRecordUploader()))
|
||||
scope.launch {
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.zhjt.mogo_core_function_devatools.logcat.checker
|
||||
|
||||
import com.mogo.core.log.record.config.checker.ILogcatChecker
|
||||
import com.zhjt.mogo_core_function_devatools.block.observer.AnrLogcatObserver
|
||||
import okio.ByteString.Companion.encodeUtf8
|
||||
import okio.Source
|
||||
import okio.buffer
|
||||
|
||||
class AnrLogChecker: ILogcatChecker {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "AnrLogChecker"
|
||||
}
|
||||
|
||||
private val anrByteString by lazy { "ANR in com.mogo.launcher.f".encodeUtf8() }
|
||||
|
||||
override fun check(data: Source): Boolean {
|
||||
return data.buffer().indexOf(anrByteString) >= 0
|
||||
}
|
||||
|
||||
override fun observer(): ILogcatChecker.ILogcatCheckObserver {
|
||||
return AnrLogcatObserver()
|
||||
}
|
||||
}
|
||||
@@ -25,4 +25,6 @@ interface IMoGoBlockProvider {
|
||||
fun stop()
|
||||
|
||||
fun recorder(): IMessageRecorder
|
||||
|
||||
fun dump(extra: Map<String, List<String>>? = null)
|
||||
}
|
||||
Reference in New Issue
Block a user