public LogStreamMerger(LogRequest req,LogSvcPropertiesLoader propertiesLoader){
  logger.trace("LogStreamMerger()");
  this.request=req;
  LogFileFinder fileFinder=new LogFileFinder(propertiesLoader.getLogFilePaths(),propertiesLoader.getExcludedLogFilePaths());
  Map<String,List<File>> groupedLogFiles=fileFinder.findFilesGroupedByBaseName();
  List<String> groups=req.getBaseNames();
  if (groups == null || groups.isEmpty()) {
    groups=new ArrayList<>(groupedLogFiles.keySet());
  }
  logger.debug("log names: {}",groups);
  if (groups.retainAll(groupedLogFiles.keySet())) {
    logger.info("log names after filter: {}",groups);
  }
  int size=groups.size();
  logStreamList=new LogFileStream[size];
  logHeads=new LogMessage[size];
  for (int i=0; i < size; i++) {
    String service=groups.get(i);
    logStreamList[i]=new LogFileStream(service,groupedLogFiles.get(service),req,status);
    logHeads[i]=null;
  }
}

public LogStreamMerger ( LogRequest req , LogSvcPropertiesLoader propertiesLoader ) { logger . trace ( "LogStreamMerger()" ) ; this . request = req ; LogFileFinder fileFinder = new LogFileFinder ( propertiesLoader . getLogFilePaths ( ) , propertiesLoader . getExcludedLogFilePaths ( ) ) ; Map < String , List < File > > groupedLogFiles = fileFinder . findFilesGroupedByBaseName ( ) ; List < String > groups = req . getBaseNames ( ) ; if ( groups == null || groups . isEmpty ( ) ) { groups = new ArrayList < > ( groupedLogFiles . keySet ( ) ) ; } logger . debug ( "log names: {}" , groups ) ; if ( groups . retainAll ( groupedLogFiles . keySet ( ) ) ) { logger . info ( "log names after filter: {}" , groups ) ; } int size = groups . size ( ) ; logStreamList = new LogFileStream [ size ] ; logHeads = new LogMessage [ size ] ; for ( int i = 0 ; i < size ; i ++ ) { String service = groups . get ( i ) ; logStreamList [ i ] = new LogFileStream ( service , groupedLogFiles . get ( service ) , req , status ) ; logHeads [ i ] = null ; } }
merges all logs on this node based on time stamp
