集成日志抓取工具

This commit is contained in:
tongchenfei
2020-08-06 18:14:24 +08:00
parent 43e0324182
commit 169c287f44
6 changed files with 73 additions and 6 deletions

View File

@@ -204,6 +204,11 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
mApis.getSearchManagerApi().goSettings();
return true;
});
mUploadRoadCondition.setOnLongClickListener(view->{
mApis.getMogoMonitorApi().showLogDebugDialog();
return true;
});
}
ConstraintLayout rootView = findViewById(R.id.module_entrance_id_top_motion_layout);

View File

@@ -31,6 +31,7 @@ import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.monitor.IMogoMonitorProvider;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.logger.Logger;
import com.zhidao.autopilot.support.api.AutopilotServiceManage;
@@ -170,6 +171,11 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
hideLayout();
}
} );
// 初始化MonitorModule
IMogoMonitorProvider monitorProvider = (IMogoMonitorProvider) ARouter.getInstance().build(MogoServicePaths.PATH_MOGO_MONITOR).navigation(this);
monitorProvider.resetActivityContext(this);
}
private void startBaseService() {

View File

@@ -12,6 +12,11 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
buildTypes {

View File

@@ -9,10 +9,13 @@ import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.connection.IMogoOnMessageListener;
import com.mogo.service.monitor.IMogoMonitorProvider;
import com.mogo.utils.logger.LogLevel;
import com.mogo.utils.logger.Logger;
import com.zhidao.loglib.LogInfoManager;
import com.zhidao.loglib.bean.RemoteLogPushContent;
import com.zhidao.loglib.dialog.ILogDialogListener;
import com.zhidao.loglib.upload.UploadManager;
import com.zhidao.loglib.util.LogInfoManagerFactory;
import com.zhidao.loglib.util.LoggingNotice;
import java.util.Map;
@@ -22,7 +25,7 @@ import java.util.Map;
* @author tongchenfei
*/
@Route(path = MogoMonitorConst.MODULE_PATH)
public class MogoMonitorProvider implements IMogoMonitorProvider, IMogoOnMessageListener<RemoteLogPushContent> {
public class MogoMonitorProvider implements IMogoMonitorProvider, IMogoOnMessageListener<RemoteLogPushContent>, ILogDialogListener {
private static final String TAG = MogoMonitorConst.MODULE_NAME;
private LogInfoManager manualCatchLog = null;
private Map<String, LogInfoManager> managerCache = new ArrayMap<>();
@@ -31,9 +34,9 @@ public class MogoMonitorProvider implements IMogoMonitorProvider, IMogoOnMessage
@Override
public void showLogDebugDialog() {
if (manualCatchLog == null) {
manualCatchLog = new LogInfoManager.Builder(context).build();
manualCatchLog = LogInfoManagerFactory.createManualLogInfoManager(context);
}
manualCatchLog.showDebugWindow();
manualCatchLog.showDebugWindow().setDialogListener(this);
}
@Override
@@ -57,24 +60,59 @@ public class MogoMonitorProvider implements IMogoMonitorProvider, IMogoOnMessage
@Override
public void onMsgReceived(RemoteLogPushContent obj) {
Logger.d(TAG, "收到push消息: " + obj);
switch (obj.getType()){
case MogoMonitorConst.START_CATCH_LOG:
if (managerCache.containsKey(obj.getPkgName())) {
Logger.d(TAG, "这个包名的日志正在抓了: " + obj);
return;
}
LogInfoManager infoManager = new LogInfoManager.Builder(context).build();
openLoggerLevel();
LogInfoManager infoManager =
LogInfoManagerFactory.createPushLogInfoManager(context, obj);
infoManager.start();
managerCache.put(obj.getPkgName(), infoManager);
break;
case MogoMonitorConst.STOP_CATCH_LOG:
LogInfoManager stopManager = managerCache.get(obj.getPkgName());
LogInfoManager stopManager = managerCache.remove(obj.getPkgName());
if (stopManager != null) {
stopManager.stop();
}
closeLoggerLevel();
break;
default:
break;
}
}
@Override
public void onLogStart() {
// 这个是通过对话框点击开始的回调
isInManualCatchLog = true;
openLoggerLevel();
}
@Override
public void onLogStop() {
// 这个是通过对话框点击结束的回调
isInManualCatchLog = false;
closeLoggerLevel();
}
private boolean isInManualCatchLog = false;
/**
* 放开Logger的限制
*/
private void openLoggerLevel(){
Logger.init(LogLevel.DEBUG);
}
/**
* 根据状态收紧Logger的限制
*/
private void closeLoggerLevel(){
if (!isInManualCatchLog && managerCache.size() == 0) {
Logger.init( BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF );
}
}
}

View File

@@ -23,6 +23,7 @@ import com.mogo.service.module.IMogoMarkerService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.monitor.IMogoMonitorProvider;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.obu.IMogoObuManager;
import com.mogo.service.passport.IMogoPassportManager;
@@ -243,4 +244,10 @@ public interface IMogoServiceApis extends IProvider {
* @return
*/
IMogoAuthManager getAuthManagerApi();
/**
* 获取Monitor相关api
* @return
*/
IMogoMonitorProvider getMogoMonitorApi();
}

View File

@@ -31,6 +31,7 @@ import com.mogo.service.module.IMogoMarkerService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.monitor.IMogoMonitorProvider;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.obu.IMogoObuManager;
import com.mogo.service.passport.IMogoPassportManager;
@@ -206,7 +207,12 @@ public class MogoServiceApis implements IMogoServiceApis {
return getApiInstance( IMogoAuthManager.class, MogoServicePaths.PATH_AGREEMENT );
}
private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) {
@Override
public IMogoMonitorProvider getMogoMonitorApi() {
return getApiInstance(IMogoMonitorProvider.class,MogoServicePaths.PATH_MOGO_MONITOR);
}
private static < T extends IProvider > T getApiInstance(Class< T > clazz, String path ) {
T inst = SingletonsHolder.get( clazz );
if ( inst == null ) {
synchronized ( sLock ) {