public Iterable<RequestLogs> queryForLogs(long logRangeStartMs, long logRangeEndMs, LogsExportConfiguration exportConfig, LogsFieldExporterSet exporterSet) { LogService ls = LogServiceFactory.getLogService(); LogQuery lq = new LogQuery(); lq = lq.startTimeMillis(logRangeStartMs) .endTimeMillis(logRangeEndMs) .includeAppLogs(true); if (exportConfig.getLogLevel() != null) { lq = lq.minLogLevel(exportConfig.getLogLevel()); } List<Version> appVersions = exporterSet.applicationVersionsToExport(); if (appVersions != null && appVersions.size() > 0) { lq = lq.versions(appVersions); } Iterable<RequestLogs> logs = ls.fetch(lq); return logs; } }
protected AppLogLine findLogLineContaining(String text, int retryMax) { LogQuery logQuery = new LogQuery() .includeAppLogs(true) .includeIncomplete(true) // Not specifying start time causes test to time out since it searches // all the logs. .startTimeMillis(System.currentTimeMillis() - (20 * 1000)); return findLogLine(text, logQuery, retryMax); }
private RequestLogs getRequestLogs(String request1Id) { LogQuery logQuery = new LogQuery().requestIds(Collections.singletonList(request1Id)); Iterator<RequestLogs> iterator = findLogLine(logQuery, 2); if (iterator == null || !iterator.hasNext()) { return null; } return iterator.next(); }
long endMilliTime = System.currentTimeMillis() - 2000L; List<String> majorVersions = Arrays.asList("1", "2", "3"); LogQuery logQuery = new LogQuery() .batchSize((int) batchSize) .startTimeMillis(startMilliTime) .endTimeMillis(endMilliTime) .minLogLevel(LogService.LogLevel.WARN) .includeIncomplete(true) .includeAppLogs(true) .offset(null) .majorVersionIds(majorVersions); assertEquals(batchSize, (long)logQuery.getBatchSize()); assertEquals(startMilliTime, (long)logQuery.getStartTimeMillis()); assertEquals(startMilliTime * 1000, (long)logQuery.getStartTimeUsec()); assertEquals(endMilliTime, (long)logQuery.getEndTimeMillis()); assertEquals(endMilliTime * 1000, (long)logQuery.getEndTimeUsec()); assertEquals(LogService.LogLevel.WARN, logQuery.getMinLogLevel()); assertEquals(true, logQuery.getIncludeIncomplete()); assertEquals(true, logQuery.getIncludeAppLogs()); assertEquals(null, logQuery.getOffset()); assertEquals(majorVersions, logQuery.getMajorVersionIds()); assertEquals(new ArrayList<String>(), logQuery.getRequestIds()); logQuery = new LogQuery() .versions(versions) .startTimeMillis(startMilliTime); assertEquals(versions, logQuery.getVersions());
@Test public void testAllKindsOfLogQueries() { List<String> exceptions = new ArrayList<String>(); assertLogQueryExecutes(new LogQuery(), "testDefaultQuery", exceptions); assertLogQueryExecutes(new LogQuery().minLogLevel(LogService.LogLevel.WARN), "testMinLogLevel", exceptions); assertLogQueryExecutes(new LogQuery().includeIncomplete(true), "testIncludeIncompleteTrue", exceptions); assertLogQueryExecutes(new LogQuery().includeIncomplete(false), "testIncludeIncompleteFalse", exceptions); assertLogQueryExecutes(new LogQuery().includeAppLogs(true), "testIncludeAppLogsTrue", exceptions); assertLogQueryExecutes(new LogQuery().includeAppLogs(false), "testIncludeAppLogsFalse", exceptions); assertLogQueryExecutes(new LogQuery().batchSize(20), "testBatchSize", exceptions); assertLogQueryExecutes(new LogQuery().offset(null), "testOffset", exceptions); assertLogQueryExecutes(new LogQuery().versions(Arrays.asList(new LogQuery.Version("module1", "1"), new LogQuery.Version("module2", "3"))), "testVersions", exceptions); assertLogQueryExecutes(new LogQuery().majorVersionIds(Arrays.asList("1", "2", "3")), "testMajorVersionIds", exceptions); assertLogQueryExecutes(new LogQuery().startTimeMillis(System.currentTimeMillis()), "testStartTimeMillis", exceptions); assertLogQueryExecutes(new LogQuery().startTimeUsec(1000L * System.currentTimeMillis()), "testStartTimeUsec", exceptions); assertLogQueryExecutes(new LogQuery().endTimeMillis(System.currentTimeMillis()), "testEndTimeMillis", exceptions); assertLogQueryExecutes(new LogQuery().endTimeUsec(1000L * System.currentTimeMillis()), "testEndTimeUsec", exceptions); assertLogQueryExecutes(new LogQuery().requestIds(Arrays.asList(getCurrentRequestId())), "testRequestIds", exceptions); assertLogQueryExecutes( new LogQuery() .minLogLevel(LogService.LogLevel.WARN) .includeIncomplete(true) .includeAppLogs(true) .batchSize(20) .offset(null) .majorVersionIds(Arrays.asList("1", "2", "3")) .startTimeMillis(System.currentTimeMillis() - 3000L) .endTimeMillis(System.currentTimeMillis() - 2000L), "testCombo", exceptions);
LogQuery.Builder .withMinLogLevel(LogService.LogLevel.WARN) .includeIncomplete(true) .includeAppLogs(true) .batchSize(20) .offset(null) .majorVersionIds(Arrays.asList("1", "2", "3")) .startTimeMillis(System.currentTimeMillis() - 3000L) .endTimeMillis(System.currentTimeMillis() - 2000L), "testCombo", exceptions); assertEquals(exceptions.toString(), 0, exceptions.size());
@Test @InSequence(20) public void testMinLogLevel() throws Exception { sync(5000); // Wait for previous requests. String infoLogMsg = "info_incompleteRequest-" + System.currentTimeMillis(); log.info(infoLogMsg); flush(log); sync(5000); // Yes, even after a flush we need to wait for the logs to be available. LogQuery debugLogQuery = new LogQuery().includeAppLogs(true).includeIncomplete(true).minLogLevel(DEBUG); assertLogQueryReturns("info_createCompleteRequest1", debugLogQuery); assertLogQueryReturns("warning_createCompleteRequest1", debugLogQuery); assertLogQueryReturns("severe_createCompleteRequest2", debugLogQuery); assertLogQueryReturns("info_createCompleteRequest3", debugLogQuery); assertLogQueryReturns(infoLogMsg, debugLogQuery); LogQuery warnLogQuery = new LogQuery().includeAppLogs(true).includeIncomplete(true).minLogLevel(WARN); assertLogQueryReturns("info_createCompleteRequest1", warnLogQuery); assertLogQueryReturns("warning_createCompleteRequest1", warnLogQuery); assertLogQueryReturns("severe_createCompleteRequest2", warnLogQuery); assertLogQueryDoesNotReturn("info_createCompleteRequest3", warnLogQuery); assertLogQueryDoesNotReturn(infoLogMsg, warnLogQuery); LogQuery errorLogQuery = new LogQuery().includeAppLogs(true).includeIncomplete(true).minLogLevel(ERROR); assertLogQueryReturns("severe_createCompleteRequest2", errorLogQuery); assertLogQueryDoesNotReturn("info_createCompleteRequest1", errorLogQuery); assertLogQueryDoesNotReturn("warning_createCompleteRequest1", errorLogQuery); assertLogQueryDoesNotReturn("info_createCompleteRequest3", errorLogQuery); assertLogQueryDoesNotReturn(infoLogMsg, errorLogQuery); }
@Test public void testLogLinesAreReturnedOnlyWhenRequested() { Logger log = Logger.getLogger(LogServiceTest.class.getName()); log.info("hello_testLogLinesAreReturnedOnlyWhenRequested"); flush(log); for (RequestLogs logs : service.fetch(new LogQuery().includeIncomplete(true).includeAppLogs(false))) { assertTrue("AppLogLines should be empty", logs.getAppLogLines().isEmpty()); } for (RequestLogs logs : service.fetch(new LogQuery().includeIncomplete(true).includeAppLogs(true))) { if (!logs.getAppLogLines().isEmpty()) { // if we've found at least one appLogLine, the test passed return; } } fail("Should have found at least one appLogLine, but didn't find any"); }
@Test @InSequence(20) public void testGetBatchSize() throws Exception { long size = 1; LogService service = LogServiceFactory.getLogService(); LogQuery logQuery = new LogQuery().requestIds(Arrays.asList(request1Id, request2Id)).batchSize((int)size); Iterator<RequestLogs> iterator = service.fetch(logQuery).iterator(); assertNotNull(iterator.next()); // TODO: renable when expected behavior is confirmed. // assertFalse("Batch size 1 so there should not be another log", iterator.hasNext()); long batchSize = logQuery.getBatchSize(); assertEquals(size, batchSize); }
@Test @InSequence(20) public void testRequestLogsAreSortedNewestFirst() throws EntityNotFoundException { LogQuery query = new LogQuery().startTimeMillis(System.currentTimeMillis() - 60000); Iterator<RequestLogs> iterator = findLogLine(query, 3); Long previousEndTimeUsec = null; while (iterator.hasNext()) { RequestLogs requestLogs = iterator.next(); long endTimeUsec = requestLogs.getEndTimeUsec(); if (previousEndTimeUsec != null) { assertTrue( "RequestLogs with endTimeUsec " + endTimeUsec + " was returned after RequestLogs with endTimeUsec " + previousEndTimeUsec, previousEndTimeUsec >= endTimeUsec); } previousEndTimeUsec = endTimeUsec; } }
@Test @InSequence(20) public void testIncomplete() throws Exception { // GAE dev server doesn't handle this assumeEnvironment(Environment.APPSPOT, Environment.CAPEDWARF); String infoLogMsg = "info_incompleteRequest-" + System.currentTimeMillis(); log.info(infoLogMsg); flush(log); sync(5000); // Yes, even after a flush we need to wait for the logs to be available. assertLogQueryReturns(infoLogMsg, new LogQuery().includeAppLogs(true).includeIncomplete(true)); assertLogQueryReturns("info_createCompleteRequest1", new LogQuery().includeAppLogs(true).includeIncomplete(true)); assertLogQueryDoesNotReturn(infoLogMsg, new LogQuery().includeAppLogs(true) .includeIncomplete(false).startTimeMillis(System.currentTimeMillis() - 60000)); }
@Test @InSequence(20) public void testRequestIds() throws Exception { LogService service = LogServiceFactory.getLogService(); LogQuery logQuery = new LogQuery().requestIds(Arrays.asList(request1Id, request2Id)); Iterator<RequestLogs> iterator = service.fetch(logQuery).iterator(); assertEquals(request1Id, iterator.next().getRequestId()); assertEquals(request2Id, iterator.next().getRequestId()); assertFalse(iterator.hasNext()); logQuery = new LogQuery().requestIds(Arrays.asList(request2Id)); iterator = service.fetch(logQuery).iterator(); assertEquals(request2Id, iterator.next().getRequestId()); assertFalse(iterator.hasNext()); }
public RequestLogs getCurrentRequestLogs() { LogQuery logQuery = new LogQuery() .includeAppLogs(true) .includeIncomplete(true) .startTimeMillis(System.currentTimeMillis() - 20000); for (RequestLogs requestLogs : LogServiceFactory.getLogService().fetch(logQuery)) { if (requestLogs.getRequestId().equals(getCurrentRequestId())) { return requestLogs; } } fail("Could not find RequestLogs for current request"); return null; // not sure, why the following code throws LogServiceException: An error occurred retrieving logs from storage. // LogQuery logQuery = new LogQuery() // .includeAppLogs(true) // .requestIds(Collections.singletonList(getCurrentRequestId())); // Iterable<RequestLogs> iterable = LogServiceFactory.getLogService().fetch(logQuery); // assertTrue("Could not find RequestLogs for current request", iterable.iterator().hasNext()); // return iterable.iterator().next(); } }