diff --git a/skywalking-log/example/pom.xml b/skywalking-log/example/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..84929ab18e833c9491c0b746dfa691d8f34c6625
--- /dev/null
+++ b/skywalking-log/example/pom.xml
@@ -0,0 +1,50 @@
+
+
+ skywalking-log
+ com.ai.cloud
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ example
+ jar
+
+ example
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+ log4j
+ log4j
+ 1.2.17
+ test
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.4.1
+ test
+
+
+ com.ai.cloud
+ skywalking-log4j-2.x-plugin
+ 1.0-SNAPSHOT
+
+
+ com.ai.cloud
+ skywalking-log4j-1.x-plugin
+ 1.0-SNAPSHOT
+
+
+
diff --git a/skywalking-log/example/src/test/java/com/ai/cloud/log/test/TestA.java b/skywalking-log/example/src/test/java/com/ai/cloud/log/test/TestA.java
new file mode 100644
index 0000000000000000000000000000000000000000..3253cd90857caa551767c5f8cdfc99e6982033c4
--- /dev/null
+++ b/skywalking-log/example/src/test/java/com/ai/cloud/log/test/TestA.java
@@ -0,0 +1,17 @@
+package com.ai.cloud.log.test;
+
+import org.apache.log4j.Logger;
+
+public class TestA {
+
+ private Logger logger = Logger.getLogger(TestA.class);
+
+ public void logHelloWorld() {
+ logger.info("Hello World");
+ new TestB().log2jHelloWorld();
+ }
+
+ public static void main(String[] args) {
+ new TestA().logHelloWorld();
+ }
+}
diff --git a/skywalking-log/example/src/test/java/com/ai/cloud/log/test/TestB.java b/skywalking-log/example/src/test/java/com/ai/cloud/log/test/TestB.java
new file mode 100644
index 0000000000000000000000000000000000000000..44e5d98bba5d37bc10dc8eed64e0edcdc4547129
--- /dev/null
+++ b/skywalking-log/example/src/test/java/com/ai/cloud/log/test/TestB.java
@@ -0,0 +1,13 @@
+package com.ai.cloud.log.test;
+
+
+import org.apache.logging.log4j.LogManager;
+
+public class TestB {
+
+ private org.apache.logging.log4j.Logger logger = LogManager.getLogger(TestB.class);
+
+ public void log2jHelloWorld() {
+ logger.info("{}", "Hello World");
+ }
+}
diff --git a/skywalking-log/example/src/test/resources/log4j.properties b/skywalking-log/example/src/test/resources/log4j.properties
new file mode 100644
index 0000000000000000000000000000000000000000..72a571f684561cc5ed5c2b9c23c681aa27836387
--- /dev/null
+++ b/skywalking-log/example/src/test/resources/log4j.properties
@@ -0,0 +1,13 @@
+log4j.rootLogger=INFO, A1
+#log4j.appender.A1=org.apache.log4j.FileAppender
+#log4j.appender.A1.File=${catalina.base}/logs/mvno_crm_all.log
+#log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+#log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss.SSS} %c %n[%p] %n%m%n
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+#log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout=com.ai.cloud.skywalking.plugin.log.log4j.v1.x.TraceIdPatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%x] %-d{yyyy-MM-dd HH:mm:ss.SSS} %c %n[%p] %n%m%n
+
+log4j.logger.com.ailk=DEBUG
+log4j.logger.org.springframework=DEBUG
\ No newline at end of file
diff --git a/skywalking-log/example/src/test/resources/log4j2.xml b/skywalking-log/example/src/test/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc21be6ff573511130836c4a6c30c6cc739910df
--- /dev/null
+++ b/skywalking-log/example/src/test/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternConverter.java b/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..addb26893bca61b2204f320c346a0780d2068d20
--- /dev/null
+++ b/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternConverter.java
@@ -0,0 +1,12 @@
+package com.ai.cloud.skywalking.plugin.log.log4j.v1.x;
+
+import com.ai.cloud.skywalking.api.Tracing;
+import org.apache.log4j.helpers.PatternConverter;
+import org.apache.log4j.spi.LoggingEvent;
+
+public class TraceIdPatternConverter extends PatternConverter {
+ @Override
+ protected String convert(LoggingEvent loggingEvent) {
+ return "TID:" + Tracing.getTraceId();
+ }
+}
diff --git a/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternLayout.java b/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternLayout.java
new file mode 100644
index 0000000000000000000000000000000000000000..89e226b762ce5596749c5d29dfbff447abcdb961
--- /dev/null
+++ b/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternLayout.java
@@ -0,0 +1,12 @@
+package com.ai.cloud.skywalking.plugin.log.log4j.v1.x;
+
+
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.helpers.PatternParser;
+
+public class TraceIdPatternLayout extends PatternLayout {
+ @Override
+ protected PatternParser createPatternParser(String pattern) {
+ return new TraceIdPatternParser(pattern);
+ }
+}
diff --git a/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternParser.java b/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9141a58b21cac734eb386442634341a76123046
--- /dev/null
+++ b/skywalking-log/log4j-1.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v1/x/TraceIdPatternParser.java
@@ -0,0 +1,21 @@
+package com.ai.cloud.skywalking.plugin.log.log4j.v1.x;
+
+import org.apache.log4j.helpers.PatternParser;
+
+/**
+ * Created by astraea on 2015/12/31.
+ */
+public class TraceIdPatternParser extends PatternParser {
+ public TraceIdPatternParser(String pattern) {
+ super(pattern);
+ }
+
+ @Override
+ protected void finalizeConverter(char c) {
+ if ('x' == c) {
+ addConverter(new TraceIdPatternConverter());
+ } else {
+ super.finalizeConverter(c);
+ }
+ }
+}
diff --git a/skywalking-log/log4j-2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v2/x/TraceIdConverter.java b/skywalking-log/log4j-2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v2/x/TraceIdConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b0254fae44a3a6bdedcf5f9d6ac3771a0359dc6
--- /dev/null
+++ b/skywalking-log/log4j-2.x-plugin/src/main/java/com/ai/cloud/skywalking/plugin/log/log4j/v2/x/TraceIdConverter.java
@@ -0,0 +1,31 @@
+package com.ai.cloud.skywalking.plugin.log.log4j.v2.x;
+
+import com.ai.cloud.skywalking.api.Tracing;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.pattern.ConverterKeys;
+import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
+
+@Plugin(name = "TraceIdConverter", category = "Converter")
+@ConverterKeys({"tid"})
+public class TraceIdConverter extends LogEventPatternConverter {
+
+ /**
+ * Constructs an instance of LoggingEventPatternConverter.
+ *
+ * @param name name of converter.
+ * @param style CSS style for output.
+ */
+ protected TraceIdConverter(String name, String style) {
+ super(name, style);
+ }
+
+ public static TraceIdConverter newInstance(String[] options) {
+ return new TraceIdConverter("tid", "tid");
+ }
+
+ @Override
+ public void format(LogEvent event, StringBuilder toAppendTo) {
+ toAppendTo.append("TId:" + Tracing.getTraceId());
+ }
+}
diff --git a/skywalking-log/log4j-2.x-plugin/src/test/java/TestLog.java b/skywalking-log/log4j-2.x-plugin/src/test/java/TestLog.java
new file mode 100644
index 0000000000000000000000000000000000000000..9cc5c4781e9ac92dd80f1eb0ab1a9ca1b706e783
--- /dev/null
+++ b/skywalking-log/log4j-2.x-plugin/src/test/java/TestLog.java
@@ -0,0 +1,11 @@
+import org.apache.logging.log4j.LogManager;
+
+/**
+ * Created by astraea on 2015/12/31.
+ */
+public class TestLog {
+ public static void main(String[] args) {
+ org.apache.logging.log4j.Logger logger = LogManager.getLogger(TestLog.class);
+ logger.info("{}","Hello World");
+ }
+}
diff --git a/skywalking-log/log4j-2.x-plugin/src/test/resources/log4j2.xml b/skywalking-log/log4j-2.x-plugin/src/test/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc21be6ff573511130836c4a6c30c6cc739910df
--- /dev/null
+++ b/skywalking-log/log4j-2.x-plugin/src/test/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file