diff --git a/config.gradle b/config.gradle index 087d80e74b..e988b6635d 100644 --- a/config.gradle +++ b/config.gradle @@ -218,7 +218,8 @@ ext { weak_network : "com.mogo.weak:network:1.0.0", - mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.5" + mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.5", + log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.0" ] android = [ launcherApplicationId : "com.mogo.launcher", diff --git a/core/function-impl/mogo-core-function-devatools/build.gradle b/core/function-impl/mogo-core-function-devatools/build.gradle index 45d6b48c23..cdeaff375c 100644 --- a/core/function-impl/mogo-core-function-devatools/build.gradle +++ b/core/function-impl/mogo-core-function-devatools/build.gradle @@ -90,6 +90,7 @@ dependencies { implementation rootProject.ext.dependencies.koomnative implementation rootProject.ext.dependencies.koomxhook implementation rootProject.ext.dependencies.mofang_runtime + implementation rootProject.ext.dependencies.log_runtime implementation group: "com.tencent.matrix", name: "matrix-android-lib", version: MATRIX_VERSION, changing: true implementation group: "com.tencent.matrix", name: "matrix-android-commons", version: MATRIX_VERSION, changing: true implementation group: "com.tencent.matrix", name: "matrix-trace-canary", version: MATRIX_VERSION, changing: true diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index f9fe09bb17..45f0186f5c 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -20,6 +20,7 @@ import com.mogo.eagle.core.function.api.devatools.IDevaToolsProvider import com.mogo.eagle.core.function.api.devatools.apm.* import com.mogo.eagle.core.function.api.devatools.strict.* import com.mogo.eagle.core.function.api.devatools.download.* +import com.mogo.eagle.core.function.api.devatools.logcat.* import com.mogo.eagle.core.function.api.devatools.mofang.* import com.mogo.eagle.core.function.api.lookaround.* import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -43,6 +44,7 @@ import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl import com.zhjt.mogo_core_function_devatools.koom.KoomInitTask +import com.zhjt.mogo_core_function_devatools.logcat.* import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager import com.zhjt.mogo_core_function_devatools.lookaround.* import com.zhjt.mogo_core_function_devatools.matrix.DynamicConfigImpl @@ -79,6 +81,8 @@ class DevaToolsProvider : IDevaToolsProvider { private val mofangProvider by lazy { MoGoMoFangProviderImpl() } + private val logRecordProvider by lazy { MoGoLogRecordProviderImpl() } + @Volatile private var mDockerVersion: String? = null @@ -113,6 +117,11 @@ class DevaToolsProvider : IDevaToolsProvider { (mContext as? Application)?.also { mofangProvider.init(it) } + + mContext?.also { + logRecordProvider.init(it) + logRecordProvider.start() + } } override fun checkMonitorDb() { @@ -366,4 +375,6 @@ class DevaToolsProvider : IDevaToolsProvider { override fun lookAroundDataProvider(): IMoGoLookAroundProvider = lookAroundDataProvider override fun mofang(): IMoGoMoFangProvider = mofangProvider + + override fun logRecord(): IMoGoLogRecordProvider = logRecordProvider } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt new file mode 100644 index 0000000000..81558aa2e6 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt @@ -0,0 +1,54 @@ +package com.zhjt.mogo_core_function_devatools.logcat + +import android.content.* +import android.os.Process +import android.util.* +import com.mogo.core.log.record.* +import com.mogo.core.log.record.config.* +import com.mogo.eagle.core.function.api.devatools.logcat.* +import com.mogo.eagle.core.utilcode.util.* +import com.zhjt.mogo_core_function_devatools.logcat.uploader.* +import kotlinx.coroutines.* +import java.io.* +import java.util.concurrent.TimeUnit.MINUTES +import java.util.concurrent.atomic.AtomicBoolean + +internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider { + + private val flag by lazy { AtomicBoolean(false) } + + private val scope by lazy { CoroutineScope(Dispatchers.IO + SupervisorJob()) } + + override fun init(context: Context) { + LogcatManager.init(LogcatConfig.Builder().context(context) + .recordPeriod(MINUTES.toMillis(3)) + .maxSizeInLogDir((1 * 1024 * 1024 * 1024).toLong()) //1G的最大容量 + .recordDir(File(context.getExternalFilesDir(null), "logcat")) + .pid(Process.myPid()) + .uploader(LogRecordUploader())) + } + + + override fun start() { + if (flag.get()) { + return + } + flag.set(true) + LogcatManager.start() + } + + override fun stop() { + if (!flag.get()) { + return + } + flag.set(false) + LogcatManager.stop() + } + + override fun upload(startTime: Long, endTime: Long) { + scope.launch { + val result = LogcatManager.upload(startTime, endTime) + Log.d(TAG, "上传日志:[startTime:$startTime, endTime: $endTime], 结果: $result") + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt new file mode 100644 index 0000000000..4f03953bf8 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt @@ -0,0 +1,11 @@ +package com.zhjt.mogo_core_function_devatools.logcat.uploader + +import com.mogo.core.log.record.config.uploader.* +import com.mogo.core.log.record.model.* + +internal class LogRecordUploader: ILogcatUploader { + + override suspend fun upload(startTime: Long, endTime: Long, generatedZipPath: String): UploadState { + throw AssertionError("Not Implementation") + } +} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index 3f81643828..3105a75a5e 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -14,6 +14,7 @@ import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.function.api.devatools.apm.* import com.mogo.eagle.core.function.api.devatools.strict.* import com.mogo.eagle.core.function.api.devatools.download.* +import com.mogo.eagle.core.function.api.devatools.logcat.* import com.mogo.eagle.core.function.api.devatools.mofang.* import com.mogo.eagle.core.function.api.lookaround.* import com.mogo.eagle.core.function.api.upgrade.* @@ -218,4 +219,10 @@ interface IDevaToolsProvider : IProvider { * 魔方功能提供者 */ fun mofang(): IMoGoMoFangProvider + + + /** + * 日志记录功能 + */ + fun logRecord(): IMoGoLogRecordProvider } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt new file mode 100644 index 0000000000..cd78b7ac77 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt @@ -0,0 +1,14 @@ +package com.mogo.eagle.core.function.api.devatools.logcat + +import android.content.Context + +interface IMoGoLogRecordProvider { + + fun init(context: Context) + + fun start() + + fun stop() + + fun upload(startTime: Long, endTime: Long) +} \ No newline at end of file