diff --git a/README.md b/README.md
index 45466f855..9e47ec38d 100644
--- a/README.md
+++ b/README.md
@@ -144,7 +144,11 @@ INSERT INTO `system_config` (`config_id`,`conf_key`,`conf_value`,`val_type`,`val
暂未提供
## 使用maven发布各插件工程
-发布skywalking-sdk-plugin下的各子工程(dubbo-plugin,spring-plugin,web-plugin,jdbc-plugin,httpclient-4.2.x-plugin,httpclient-4.3.x-plugin)
+- 发布skywalking-sdk-plugin下的各子工程(dubbo-plugin,spring-plugin,web-plugin,jdbc-plugin,httpclient-4.2.x-plugin,httpclient-4.3.x-plugin)
+- 请跳过maven.test环节,避免打包失败
+```properties
+-Dmaven.test.skip=true
+```
## 引入核心SDK
无论试用哪种插件,都必须引入
@@ -180,21 +184,38 @@ export SKYWALKING_RUN=true
- 设置完成后,可以在当前环境中启动业务应用系统
## 通过扩展log4j或log4j2,在应用日志中,显示trace-id
-- 编译并发布skywalking-log/log4j-1.x-plugin和skywalking-log/log4j-2.x-plugin
-- 引用所需的日志插件
+### log4j
+- 编译并发布skywalking-log/log4j-1.x-plugin
```xml
com.ai.cloud
skywalking-log4j-1.x-plugin
1.0-SNAPSHOT
+```
+- 配置log4j配置文件
+```properties
+log4j.appender.A1.layout=com.ai.cloud.skywalking.plugin.log.log4j.v1.x.TraceIdPatternLayout
+#%x为traceid的转义符
+log4j.appender.A1.layout.ConversionPattern=[%x] %-d{yyyy-MM-dd HH:mm:ss.SSS} %c %n[%p] %n%m%n
+```
+
+### log4j2
+- 编译并发布skywalking-log/log4j-2.x-plugin
+- 引用所需的日志插件
+```xml
com.ai.cloud
skywalking-log4j-2.x-plugin
1.0-SNAPSHOT
```
-- 设置log4j和log4j2参考[用户指南](http://wu-sheng.github.io/sky-walking/sample-code/codeView.html)->能通过哪些渠道在应用中发现traceid?
+- 配置log4j2配置文件
+```xml
+
+
+```
+
- 日志示例
```
#tid:N/A,代表环境设置不正确或监控已经关闭
@@ -203,5 +224,21 @@ export SKYWALKING_RUN=true
[DEBUG] Returning handler method [public org.springframework.web.servlet.ModelAndView com.ai.cloud.skywalking.example.controller.OrderSaveController.save(javax.servlet.http.HttpServletRequest)] TID:1.0a2.1453192613272.2e0c63e.11144.58.1 2016-01-19 16:36:53.288 org.springframework.beans.factory.support.DefaultListableBeanFactory
```
+## 如何在追踪日志中记录日志上下文
+- 使用sky walking提供的专用API,可以将日志保存到追踪日志中。示例如下:
+```java
+String businessKey = "phoneNumber:" + phoneNumber + ",resourceId:" + resourceId + ",mail:" + mail;
+BusinessKeyAppender.setBusinessKey2Trace(businessKey);
+```
+
+## 如何在代码中获取traceid
+- 通过API获取traceid
+```java
+Tracing.getTraceId();
+```
+
+## 还有其他方式获取traceid么?
+- 通过web应用的http调用入口,通过返回的header信息,找到此次调用的traceid。前提:此web应用的url,已经使用skywalking进行监控。
+
# 源代码说明
* [HBase存储结构说明](https://github.com/wu-sheng/sky-walking/blob/master/skywalking-server/doc/hbase_table_desc.md)
diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java
index 1f0529e03..e0a3a455d 100644
--- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java
+++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java
@@ -59,6 +59,7 @@ public class DataSender implements IDataSender {
bootstrap.connect(address).sync();
} catch (Exception e) {
status = SenderStatus.FAILED;
+ SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.INFO, "DataSender[" + socketAddress + "] send data successfully.");
}
}
@@ -73,15 +74,15 @@ public class DataSender implements IDataSender {
try {
if (channel != null && channel.isActive()) {
channel.writeAndFlush(data.getBytes());
- SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.INFO, "DataSender send data successfully.");
+ SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.INFO, "DataSender[" + socketAddress + "] send data successfully.");
return true;
}else{
DataSenderFactoryWithBalance.unRegister(this);
- SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender channel isn't active. unregister sender.");
+ SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender[" + socketAddress + "] channel isn't active. unregister sender.");
}
} catch (Exception e) {
DataSenderFactoryWithBalance.unRegister(this);
- SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender channel broken. unregister sender.");
+ SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender[" + socketAddress + "] channel broken. unregister sender.");
}
return false;