AbstractWorkerProvider should be implemented by any class whose
@@ -28,8 +28,7 @@ import org.apache.logging.log4j.Logger;
*
*/
public abstract class AbstractWorkerProvider {
-
- private Logger logger = LogManager.getFormatterLogger(AbstractWorkerProvider.class);
+ private ILog logger = LogManager.getLogger(AbstractWorkerProvider.class);
public abstract Class workerClass();
diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkerRef.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkerRef.java
index 64a8a939b..92637fe8d 100644
--- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkerRef.java
+++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkerRef.java
@@ -2,8 +2,8 @@ package com.a.eye.skywalking.collector.actor;
import akka.actor.ActorPath;
import akka.actor.ActorRef;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.a.eye.skywalking.logging.ILog;
+import com.a.eye.skywalking.logging.LogManager;
/**
* The Worker reference
@@ -11,7 +11,7 @@ import org.apache.logging.log4j.Logger;
* @author pengys5
*/
public class WorkerRef {
- private Logger logger = LogManager.getFormatterLogger(WorkerRef.class);
+ private ILog logger = LogManager.getLogger(WorkerRef.class);
final ActorRef actorRef;
diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkersCreator.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkersCreator.java
index c4b88371c..550956f8c 100644
--- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkersCreator.java
+++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/WorkersCreator.java
@@ -3,8 +3,8 @@ package com.a.eye.skywalking.collector.actor;
import akka.actor.ActorSystem;
import akka.actor.Props;
import com.a.eye.skywalking.collector.cluster.WorkersListener;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.a.eye.skywalking.logging.ILog;
+import com.a.eye.skywalking.logging.LogManager;
import java.util.ServiceLoader;
@@ -17,7 +17,7 @@ import java.util.ServiceLoader;
public enum WorkersCreator {
INSTANCE;
- private Logger logger = LogManager.getFormatterLogger(WorkersCreator.class);
+ private ILog logger = LogManager.getLogger(WorkersCreator.class);
/**
* create worker to use Java Spi.
diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/ClusterConfigInitializer.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/ClusterConfigInitializer.java
index e37feafa9..f16ad7d86 100644
--- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/ClusterConfigInitializer.java
+++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/ClusterConfigInitializer.java
@@ -2,9 +2,8 @@ package com.a.eye.skywalking.collector.cluster;
import com.a.eye.skywalking.api.util.ConfigInitializer;
import com.a.eye.skywalking.api.util.StringUtil;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
+import com.a.eye.skywalking.logging.ILog;
+import com.a.eye.skywalking.logging.LogManager;
import java.io.InputStream;
import java.util.Properties;
@@ -21,7 +20,7 @@ import java.util.Properties;
*/
public class ClusterConfigInitializer {
- private static Logger logger = LogManager.getFormatterLogger(ClusterConfigInitializer.class);
+ private static ILog logger = LogManager.getLogger(ClusterConfigInitializer.class);
public static final String ConfigFileName = "collector.config";
diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/WorkersListener.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/WorkersListener.java
index 86491cf15..244c57645 100644
--- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/WorkersListener.java
+++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/WorkersListener.java
@@ -5,8 +5,8 @@ import akka.actor.Terminated;
import akka.actor.UntypedActor;
import akka.cluster.Cluster;
import akka.cluster.ClusterEvent;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import com.a.eye.skywalking.logging.ILog;
+import com.a.eye.skywalking.logging.LogManager;
/**
* WorkersListener listening the register message from workers
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.Logger;
*/
public class WorkersListener extends UntypedActor {
- private Logger logger = LogManager.getFormatterLogger(WorkersListener.class);
+ private ILog logger = LogManager.getLogger(WorkersListener.class);
public static final String WorkName = "WorkersListener";
diff --git a/skywalking-collector/skywalking-collector-worker/pom.xml b/skywalking-collector/skywalking-collector-worker/pom.xml
index 15ff30c96..58087d109 100644
--- a/skywalking-collector/skywalking-collector-worker/pom.xml
+++ b/skywalking-collector/skywalking-collector-worker/pom.xml
@@ -18,6 +18,16 @@
LogResolver is an implementation of {@link LogResolver},
+ *
+ *
+ * @author wusheng
+ */
+public class Log4j2Resolver implements LogResolver {
+ @Override
+ public ILog getLogger(Class> clazz) {
+ return new Log4j2Logger(clazz);
+ }
+}
diff --git a/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml b/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml
index 2f7d3c750..47d71df53 100644
--- a/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml
+++ b/skywalking-sniffer/skywalking-agent/dependency-reduced-pom.xml
@@ -45,6 +45,30 @@
BootService is an interface to all services, which need to boot when plugin mechanism begins to
+ * work.
+ * {@link #bootUp()} will be called when BootService start up.
+ *
+ * @author wusheng
+ */
+public interface BootService {
+ void bootUp();
+}
diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/boot/ServiceStarter.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/boot/ServiceStarter.java
new file mode 100644
index 000000000..97a7d9bb1
--- /dev/null
+++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/boot/ServiceStarter.java
@@ -0,0 +1,41 @@
+package com.a.eye.skywalking.api.boot;
+
+import com.a.eye.skywalking.logging.ILog;
+import com.a.eye.skywalking.logging.LogManager;
+import java.util.Iterator;
+import java.util.ServiceLoader;
+
+/**
+ * The ServiceStarter bases on {@link ServiceLoader},
+ * load all {@link BootService} implementations.
+ *
+ * @author wusheng
+ */
+public enum ServiceStarter {
+ INSTANCE;
+
+ private static ILog logger = LogManager.getLogger(StatusBootService.class);
+ private volatile boolean isStarted = false;
+
+ public void boot() {
+ while (!isStarted) {
+ try {
+ IteratorStatusBootService is an abstract implementations of {@link BootService},
+ * it extends {@link BootService}'s ability like this:
+ *
+ * If an implementation extends StatusBootService, it can know whether this service starts up successfully or not.
+ * It's based on {@link #bootUp()} function finished with or without an exception. if no exception, means start up successfully.
+ *
+ *
+ * @author wusheng
+ */
+public abstract class StatusBootService implements BootService {
+ private volatile boolean started = false;
+
+ protected boolean isStarted(){
+ return this.started;
+ }
+
+ @Override
+ public final void bootUp(){
+ try {
+ bootUpWithStatus();
+ started = true;
+ } catch (Throwable e) {
+ started = false;
+ throw e;
+ }
+ }
+
+ protected abstract void bootUpWithStatus();
+}
diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/conf/SnifferConfigInitializer.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/conf/SnifferConfigInitializer.java
index dd37d05a6..40e3a4648 100644
--- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/conf/SnifferConfigInitializer.java
+++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/conf/SnifferConfigInitializer.java
@@ -1,7 +1,7 @@
package com.a.eye.skywalking.api.conf;
-import com.a.eye.skywalking.api.logging.ILog;
-import com.a.eye.skywalking.api.logging.LogManager;
+import com.a.eye.skywalking.logging.ILog;
+import com.a.eye.skywalking.logging.LogManager;
import com.a.eye.skywalking.api.util.ConfigInitializer;
import com.a.eye.skywalking.api.util.StringUtil;
diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/context/ContextManager.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/context/ContextManager.java
index 415fd9c23..0b0a4a7e2 100644
--- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/context/ContextManager.java
+++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/context/ContextManager.java
@@ -1,5 +1,6 @@
package com.a.eye.skywalking.api.context;
+import com.a.eye.skywalking.api.boot.BootService;
import com.a.eye.skywalking.api.queue.TraceSegmentProcessQueue;
import com.a.eye.skywalking.trace.Span;
import com.a.eye.skywalking.trace.TraceSegment;
@@ -16,21 +17,10 @@ import com.a.eye.skywalking.trace.TraceSegment;
*
* Created by wusheng on 2017/2/17.
*/
-public enum ContextManager implements TracerContextListener {
- INSTANCE {
- @Override public void afterFinished(TraceSegment traceSegment) {
- CONTEXT.remove();
- }
- };
-
- ContextManager() {
- TracerContext.ListenerManager.add(this);
- TraceSegmentProcessQueue.INSTANCE.start();
- }
-
+public class ContextManager implements TracerContextListener, BootService {
private static ThreadLocal