Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.net4j.trace/src/org/eclipse/net4j/internal/trace/Logger.java')
-rw-r--r--plugins/org.eclipse.net4j.trace/src/org/eclipse/net4j/internal/trace/Logger.java160
1 files changed, 160 insertions, 0 deletions
diff --git a/plugins/org.eclipse.net4j.trace/src/org/eclipse/net4j/internal/trace/Logger.java b/plugins/org.eclipse.net4j.trace/src/org/eclipse/net4j/internal/trace/Logger.java
new file mode 100644
index 0000000000..99a10d64a6
--- /dev/null
+++ b/plugins/org.eclipse.net4j.trace/src/org/eclipse/net4j/internal/trace/Logger.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2004-2017 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.trace;
+
+import org.eclipse.net4j.buffer.BufferState;
+import org.eclipse.net4j.trace.Element;
+import org.eclipse.net4j.trace.Element.BufferElement;
+import org.eclipse.net4j.trace.Listener;
+import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.factory.ProductCreationException;
+import org.eclipse.net4j.util.om.log.RollingLog;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Eike Stepper
+ */
+public class Logger extends RollingLog implements Listener
+{
+ private static final Pattern INIT_PATTERN = Pattern.compile("([A-Za-z_$][A-Za-z\\d_$]+)\\[(\\d+)\\].init\\(\\)");
+
+ public Logger(String logFile, long logSize, boolean append)
+ {
+ super(logFile, logSize, append);
+ }
+
+ public void methodCalled(Element caller, String callingMethod, Element callee, String calledMethod)
+ {
+ log(caller + "." + callingMethod + "()\t" + callee + "." + calledMethod + "()");
+ }
+
+ public void elementCreated(Element element)
+ {
+ log(element + ".init()");
+ }
+
+ public void ownerChanged(BufferElement element, Element oldOwner, Element newOwner)
+ {
+ log("\t\t" + element + ".owner = " + newOwner);
+ }
+
+ public void threadChanged(BufferElement element, Element oldThread, Element newThread)
+ {
+ String warning;
+ if (oldThread != null && newThread != null)
+ {
+ warning = " (was " + oldThread + ")";
+ }
+ else
+ {
+ warning = "";
+ }
+
+ log("\t\t" + element + ".thread = " + newThread + warning);
+ }
+
+ public void stateChanged(BufferElement element, BufferState oldState, BufferState newState)
+ {
+ log("\t\t" + element + ".state = " + newState);
+ }
+
+ public void positionChanged(BufferElement element, int oldPosition, int newPosition)
+ {
+ log("\t\t" + element + ".position = " + newPosition);
+ }
+
+ public void limitChanged(BufferElement element, int oldLimit, int newLimit)
+ {
+ log("\t\t" + element + ".limit = " + newLimit);
+ }
+
+ public void eosChanged(BufferElement element, boolean newEOS)
+ {
+ log("\t\t" + element + ".eos = " + newEOS);
+ }
+
+ public void ccamChanged(BufferElement element, boolean newCCAM)
+ {
+ log("\t\t" + element + ".ccam = " + newCCAM);
+ }
+
+ @Override
+ protected String getThreadInfo()
+ {
+ return Element.get(Thread.currentThread()).toString();
+ }
+
+ @Override
+ protected void load(Properties properties)
+ {
+ ElementCounters.INSTANCE.load(properties);
+ }
+
+ @Override
+ protected void save(Properties properties)
+ {
+ ElementCounters.INSTANCE.save(properties);
+ }
+
+ @Override
+ protected void recovery(Properties properties, LogLine logLine)
+ {
+ String message = logLine.getMessage();
+ Matcher matcher = INIT_PATTERN.matcher(message);
+ if (matcher.matches())
+ {
+ String type = matcher.group(1);
+ String id = matcher.group(2);
+ properties.setProperty(type, id);
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class Factory extends Listener.Factory
+ {
+ public static final String TYPE = "logger";
+
+ public Factory()
+ {
+ super(TYPE);
+ }
+
+ @Override
+ protected Logger create(Map<String, String> properties) throws ProductCreationException
+ {
+ String logFile = properties.get(DEFAULT_KEY);
+ if (StringUtil.isEmpty(logFile))
+ {
+ logFile = "buffers";
+ }
+
+ String logSize = properties.get("size");
+ if (StringUtil.isEmpty(logSize))
+ {
+ logSize = "100000000";
+ }
+
+ String append = properties.get("append"); //$NON-NLS-1$
+ if (StringUtil.isEmpty(append))
+ {
+ append = Boolean.TRUE.toString();
+ }
+
+ return new Logger(logFile, Long.parseLong(logSize), Boolean.parseBoolean(append));
+ }
+ }
+}

Back to the top