startReport static method
Implementation
static Future<void> startReport() async {
if (_timer != null) {
_timer?.cancel();
}
TCICLog.info("start report timer $reportTimerInterval ms", actionModule: ActionModule.report.name, actionName: ActionName.report.name);
_timer = Timer.periodic( Duration(milliseconds: reportTimerInterval), (timer) async {
await report();
// 根据剩余未上报日志调试,动态调整上报间隔,日志太多,应减小上报间隔,确保及时上报,每多200条日志,上报间隔少500ms
final remainingLogs = _cache.length;
if(remainingLogs > 0){
int latestReportTimerInterval = reportTimerInterval - (remainingLogs ~/ 200 * 500);
if(latestReportTimerInterval < minReportTimerInterval){
latestReportTimerInterval = minReportTimerInterval;
}
if(remainingLogs < batchSize){
latestReportTimerInterval = 2000; // 如果剩余日志量小于batchSize,则上报间隔为2000ms
}
// 如果reportTimerInterval 没有改变,则不重新启动定时器
if(latestReportTimerInterval != reportTimerInterval){
reportTimerInterval = latestReportTimerInterval;
await startReport();
}
}
});
}