/**
* Analytica - beta version - Systems Monitoring Tool
*
* Copyright (C) 2013, KleeGroup, direction.technique@kleegroup.com (http://www.kleegroup.com)
* KleeGroup, Centre d'affaire la Boursidi�re - BP 159 - 92357 Le Plessis Robinson Cedex - France
*
* This program is free software; you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Foundation;
* either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program;
* if not, see <http://www.gnu.org/licenses>
*/
package io.analytica.spies.impl.logs;
import io.analytica.AbstractVertigoStartTestCaseJU4;
import io.analytica.agent.AgentManager;
import io.vertigo.core.resource.ResourceManager;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
import org.junit.Test;
import com.google.gson.Gson;
/**
* Test LogSpyReader.
* Parse a log file, rebuild Processes and send them to AnalyticaServer.
*
* @author npiedeloup
*/
public final class AnalyticaLogSpyTest extends AbstractVertigoStartTestCaseJU4 {
@Inject
private AgentManager agentManager;
@Inject
private ResourceManager resourceManager;
@Override
protected void doSetUp() throws Exception {
startServer();
}
/**
* Test simple avec deux compteurs.
* Test sur l'envoi de 1000 articles d'un poids de 25 kg.
* Chaque article coute 10�.
* @throws ParseException
*/
@Test
public void testMiniLog() throws ParseException {
final LogSpyReader logSpyReader = new LogSpyReader(agentManager, resourceManager, "file:///d:\\@GitHub\\analytica-agent-spark\\spark-130614\\tomcat7_spark-stdout.2013-06-05.log", "file:///d:/@GitHub/analytica-agent/spark-130614/sparkLogSpyConf-v1.1.json");
logSpyReader.start();
flushAgentToServer();
checkMetricCount("HMDURATION", 7350, "REQUETE");
}
@Test
public void testLog130809() {
final LogSpyReader logSpyReader = new LogSpyReader(agentManager, resourceManager, "file:///d:\\@GitHub\\analytica-agent-spark\\spark-130614\\spark-130809-bis.perf.log ", "file:///d:/@GitHub/analytica-agent/spark-130614/sparkLogSpyConf-v1.2.json");
logSpyReader.start();
flushAgentToServer();
//final Date date = new SimpleDateFormat("ddMMyyyy").parse("30052013");
//checkMetricCount(date, "HMDURATION", 7350, "REQUETE");
}
@Test
public void testLog130822() {
final LogSpyReader logSpyReader = new LogSpyReader(agentManager, resourceManager, "file:///d:\\@GitHub\\analytica-agent-spark\\spark-130614\\spark-130822.perf.log ", "file:///d:/@GitHub/analytica-agent/spark-130614/sparkLogSpyConf-v1.2.json");
logSpyReader.start();
flushAgentToServer();
//final Date date = new SimpleDateFormat("ddMMyyyy").parse("30052013");
//checkMetricCount(date, "HMDURATION", 7350, "REQUETE");
}
@Test
public void testLog130829() {
final LogSpyReader logSpyReader = new LogSpyReader(agentManager, resourceManager, "file:///d:\\@GitHub\\analytica-agent-spark\\spark-130829\\all.log", "file:///d:/@GitHub/analytica-agent-spark/spark-130829/sparkLogSpyConf-v1.3.5.json");
logSpyReader.start();
flushAgentToServer();
checkMetricCount("HMDURATION", 518, "REQUETE");
}
@Test
public void testLog130829FromJson() {
final LogSpyReader logSpyReader = new LogSpyReader(agentManager, resourceManager, "file:///d:\\logs\\spark130829FileLog.log", "io/analytica/spies/impl/logs/logSpyConf.json");
logSpyReader.start();
flushAgentToServer();
checkMetricCount("HMDURATION", 518, "REQUETE");
}
@Test
public void testLog131017FromJson() throws IOException {
startServer();
final LogSpyReader logSpyReader = new LogSpyReader(agentManager, resourceManager, "file:///d:\\@GitHub\\analytica-agent-spark\\spark-131017\\analyticaFileLog.log", "file:///d:\\@GitHub/analytica-agent/analytica-client/src/test/java/com/kleegroup/analyticaimpl/spies/logs/logSpyConf.json");
logSpyReader.start();
flushAgentToServer();
checkMetricCount("HMDURATION", 510, "REQUETE");
}
@Test
public void testParsing() {
final String[] testedlogs = { "INFO 14:45:00.071 [SparkScheduler_Worker-2] spark.perf - {\"category\":\"service\",\"operation\":\"transaction\",\"resource\":\"public spark.services.domain.util.TaskLog spark.services.taskLog.TaskLogService.create(spark.commons.data.id.UID,java.lang.String,long)\",\"nanos\":20483609,\"elapsed\":\"20.48 ms\",\"thread\":\"SparkScheduler_Worker-2\",\"timestamp\":\"2013-06-05T14:45:00.055+02:00\"}", };
final String[] testedPatterns = { "^INFO ([0-9:\\.]+) \\[([a-zA-Z0-9-_]+)\\] spark\\.perf - .*\"request\"[\\u0000-\\uFFFF]+/pages/([\\u0000-\\uFFFF]+)(;jsessionid=.*)?\",\"nanos\":([0-9]+)[0-9]{6},.*\"timestamp\":\"([0-9T\\:\\.\\-]+)\\+[0-9\\:]+\".*$", //
"^INFO ([0-9:\\.]+) .*\"timestamp\":\"([0-9T\\:\\.\\-]+)\\+[0-9\\:]+\".*$", //
"^INFO ([0-9:\\.]+) .*\"nanos\":([0-9]+)[0-9]{6},.*\"timestamp\":\"([0-9T\\:\\.\\-]+)\\+[0-9\\:]+\".*$", //
"^INFO ([0-9:\\.]+) .*(;jsessionid=.*)?\",\"nanos\":([0-9]+)[0-9]{6},.*\"timestamp\":\"([0-9T\\:\\.\\-]+)\\+[0-9\\:]+\".*$", //
"^INFO ([0-9:\\.]+) .*\"request\"[.]+/pages/([.]+)(;jsessionid=.*)?\",\"nanos\":([0-9]+)[0-9]{6},.*\"timestamp\":\"([0-9T\\:\\.\\-]+)\\+[0-9\\:]+\".*$", //
"^INFO ([0-9:\\.]+) .*spark\\.perf - .*\"request\"[\\u0000-\\uFFFF]+/pages/([\\u0000-\\uFFFF]+)(;jsessionid=.*)?\",\"nanos\":([0-9]+)[0-9]{6},.*\"timestamp\":\"([0-9T\\:\\.\\-]+)\\+[0-9\\:]+\".*$" };
doTestParsing(testedlogs, testedPatterns);
}
@Test
public void testParsing2() {
final String[] testedlogs = { //
"DEBUG 2013-08-29T18:30:15.598 [http-bio-8080-exec-2] spark.perf - {\"category\":\"http\",\"operation\":\"request\",\"resource\":\"http://spark-perf-spark.dev.klee.lan.net:8080/spark/pages/home/login.jsf;jsessionid=82FC81D1CF7D2493983859B1033A67BD\",\"thread\":\"http-bio-8080-exec-2\",\"startDate\":\"2013-08-29T18:30:14.122+02:00\",\"startDateMs\":1377793814122,\"endDate\":\"2013-08-29T18:30:15.598+02:00\",\"endDateMs\":1377793815598,\"deltaMs\":1476}", //
};
final String[] testedPatterns = { //
"^DEBUG ([0-9T:\\.\\-]+) \\[([a-zA-Z0-9-_\"]+)\\] spark\\.perf - .*\"request\"[\\u0000-\\uFFFF]+/pages/([^;]+)?(;jsessionid=.*)?\",\"thread\":.*\"endDate\":\"([0-9T\\:\\.\\-]+)\\+[0-9\\:]+\".*\"deltaMs\":([0-9]*).*$" //
};
doTestParsing(testedlogs, testedPatterns);
}
@Test
public void testParsing3() {
final String[] testedlogs = { //
"20130918 15:41:39 [AnalyticaSpoolProcessThread] INFO FILELOG-AGENT - [{\"type\":\"REQUETE\",\"names\":[\"home/login.jsf\"],\"startDate\":\"Aug 29, 2013 6:29:59 PM\",\"measures\":{\"sub-duration\":10939.0,\"duration\":11031.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:29:59 PM\",\"measures\":{\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:29:59 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"JSF\",\"names\":[\"RESTORE_VIEW 1\"],\"startDate\":\"Aug 29, 2013 6:29:59 PM\",\"measures\":{\"duration\":8955.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"JSF\",\"names\":[\"RENDER_RESPONSE 6\"],\"startDate\":\"Aug 29, 2013 6:30:08 PM\",\"measures\":{\"sub-duration\":1982.0,\"duration\":1983.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"RENDERRESPONSEPHASE\",\"names\":[\"execute\"],\"startDate\":\"Aug 29, 2013 6:30:08 PM\",\"measures\":{\"sub-duration\":1981.0,\"duration\":1982.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"FACELETVIEWHANDLINGSTRATEGY\",\"names\":[\"buildView\"],\"startDate\":\"Aug 29, 2013 6:30:08 PM\",\"measures\":{\"duration\":1097.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"FACELETVIEWHANDLINGSTRATEGY\",\"names\":[\"renderView\"],\"startDate\":\"Aug 29, 2013 6:30:09 PM\",\"measures\":{\"duration\":884.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]}]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"primefaces.js.jsf;jsessionid\u003d82FC81D1CF7D2493983859B1033A67BD\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"sub-duration\":2.0,\"duration\":36.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":2.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"jquery/jquery.js.jsf;jsessionid\u003d82FC81D1CF7D2493983859B1033A67BD\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"sub-duration\":0.0,\"duration\":55.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"primefaces.css.jsf;jsessionid\u003d82FC81D1CF7D2493983859B1033A67BD\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"sub-duration\":0.0,\"duration\":103.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"theme.css.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":200.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"general/logo_new.png.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"sub-duration\":0.0,\"duration\":11.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:10 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"images/sep_header_param.gif.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":0.0,\"duration\":27.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"images/arrow_header_param.png.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":27.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"login/loginbox.png.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":0.0,\"duration\":25.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"images/bg_header.jpg.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":13.0,\"duration\":29.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":13.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"images/bg_header_param.jpg.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":40.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"login/bg_login.jpg.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":3.0,\"duration\":39.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":3.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]},{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":0.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"images/puce_lien.png.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":19.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]}]},{\"type\":\"REQUETE_RESOURCE\",\"names\":[\"login/bt_connexion.png.jsf\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":26.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"sub-duration\":1.0,\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[{\"type\":\"SERVICE\",\"names\":[\"LoginService.autoLogin\"],\"startDate\":\"Aug 29, 2013 6:30:11 PM\",\"measures\":{\"duration\":1.0,\"ERROR_PCT\":0.0},\"metaDatas\":{},\"subProcesses\":[]}]}]}] ", //
};
final String[] testedPatterns = { //
"^.*\\[([a-zA-Z0-9-_]+)\\] INFO FILELOG-AGENT - (\\[.*\\]) *$" //
};
doTestParsing(testedlogs, testedPatterns);
}
private void doTestParsing(final String[] testedlogs, final String[] testedPatterns) {
final List<Pattern> patterns = new ArrayList<>(testedPatterns.length);
for (final String testedPattern : testedPatterns) {
patterns.add(Pattern.compile(testedPattern));
}
for (final String testedlog : testedlogs) {
for (final Pattern pattern : patterns) {
final Matcher matcher = pattern.matcher(testedlog);
if (matcher.find()) {
System.out.println("Found Log " + testedlog + "\n in : " + pattern);
for (int i = 0; i <= matcher.groupCount(); i++) {
System.out.println(i + " = " + matcher.group(i));
}
} else {
System.out.println("NOT Found Log " + testedlog + "\n in : " + pattern);
}
}
}
}
@Test
public void testConf() {
final String[] dateFormats = { "HH:mm:ss.SSS", "MMM d, yyyy h:mm:ss a" };
final LogPattern[] PATTERNS = { //
new LogPattern("REQUETE", "^INFO ([0-9:\\.]+) \\[([a-zA-Z0-9-_]+)\\] spark.ui.web.LogFilter - Sortie de la ([\\u0000-\\uFFFF]+) [\\u0000-\\uFFFF]+/pages/([\\u0000-\\uFFFF]+) in ([0-9]+)ms$", //
false, -1, 1, 2, -1, 4, 5, true, false), //
new LogPattern("REQUETE_RESOURCE", "^INFO ([0-9:\\.]+) \\[([a-zA-Z0-9-_]+)\\] spark.ui.web.LogFilter - Sortie de la ([\\u0000-\\uFFFF]+) [\\u0000-\\uFFFF]+/javax\\.faces\\.resource/([\\u0000-\\uFFFF]+) in ([0-9]+)ms$", //
false, -1, 1, 2, -1, 4, 5, true, false), //
new LogPattern("PERF", "^INFO ([0-9:\\.]+) \\[([a-zA-Z0-9-]+)\\] Performance - >> ([a-zA-Z0-9]+) : ([a-zA-Z0-9-_]+) : time = ([0-9]+)$", //
false, -1, 1, 2, 3, 4, 5, false, false),//
new LogPattern("RELOAD", "^([\\u0000-\\uFFFF]+) org.apache.catalina.startup.Catalina load$", //
false, -1, 1, -1, -1, -1, -1, false, true),//
};
final LogSpyConf conf = new LogSpyConf("Test", new String[] { "test" }, Arrays.asList(dateFormats), Arrays.asList(PATTERNS));
System.out.println(new Gson().toJson(conf));
}
/*private static final String translateFileName(final String fileName, final Class<?> relativeRootClass) {
Assertion.checkArgNotEmpty(fileName);
//---------------------------------------------------------------------
if (fileName.startsWith(".")) {
//soit en relatif
return "/" + getRelativePath(relativeRootClass) + "/" + fileName;
}
//soit en absolu
if (fileName.startsWith("/")) {
return fileName;
}
return "/" + fileName;
}
private static final String getRelativePath(final Class<?> relativeRootClass) {
return relativeRootClass.getPackage().getName().replace('.', '/');
}*/
}