From e5188c990f2f61945cbd1224085118fa23a7015d Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 22 Dec 2015 20:11:51 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E5=BC=82=E5=B8=B8=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E9=80=BB=E8=BE=91=EF=BC=8C=E5=8F=AF=E4=BB=A5=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E5=88=B6=E5=AE=9A=E6=83=85=E5=86=B5=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E5=88=B6=E5=AE=9A=E7=9A=84Exception=E5=88=97=E8=A1=A8=E3=80=82?= =?UTF-8?q?=E5=A4=9A=E4=B8=AAException=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=80=97=E5=8F=B7=E5=88=86=E9=9A=94=E3=80=82=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=BC=82=E5=B8=B8=E5=85=A8=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/sky-walking.auth | 12 +++--- .../ApplicationExceptionHandler.java | 29 +++++++------ .../com/ai/cloud/skywalking/conf/Config.java | 1 + .../ai/cloud/skywalking/protocol/Span.java | 42 ++++++++++++------- 4 files changed, 50 insertions(+), 34 deletions(-) diff --git a/samples/skywalking-auth/src/main/resources/sky-walking.auth b/samples/skywalking-auth/src/main/resources/sky-walking.auth index d53f3c163..4722c7c39 100644 --- a/samples/skywalking-auth/src/main/resources/sky-walking.auth +++ b/samples/skywalking-auth/src/main/resources/sky-walking.auth @@ -1,7 +1,7 @@ -#skyWalking用户ID +++++ +#skyWalking用户ID skywalking.user_id=123 -#skyWalking应用ID +++++ -skywalking.application_id=test +#skyWalking应用ID +skywalking.application_code=test #是否打印数据 buriedpoint.printf=false @@ -18,7 +18,7 @@ sender.servers_addr=127.0.0.1:34000 sender.max_copy_num=2 #发送的最大长度 sender.max_send_length=20000 -#当没有Sender时,尝试获取sender的等待周期 +++++ +#当没有Sender时,尝试获取sender的等待周期 sender.retry_get_sender_wait_interval=2000 #是否开启发送消息 sender.is_off=false @@ -28,7 +28,7 @@ sender.is_off=false consumer.max_consumer=2 #消费者最大等待时间 consumer.max_wait_time=5 -#发送失败等待时间 +++++++ +#发送失败等待时间 consumer.consumer_fail_retry_wait_interval=50 #每个Buffer的最大个数 @@ -36,6 +36,6 @@ buffer.buffer_max_size=18000 #Buffer池的最大长度 buffer.pool_size=5 -#发送检查线程检查周期 ++++++++ +#发送检查线程检查周期 senderchecker.check_polling_time=200 diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java index d3f605dce..60e361129 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java @@ -1,7 +1,9 @@ package com.ai.cloud.skywalking.buriedpoint; -import java.util.ArrayList; -import java.util.List; +import static com.ai.cloud.skywalking.conf.Config.BuriedPoint.EXCLUSIVE_EXCEPTIONS; + +import java.util.HashSet; +import java.util.Set; import com.ai.cloud.skywalking.api.IExceptionHandler; import com.ai.cloud.skywalking.conf.Config; @@ -9,22 +11,25 @@ import com.ai.cloud.skywalking.context.Context; import com.ai.cloud.skywalking.protocol.Span; public class ApplicationExceptionHandler implements IExceptionHandler { - private static Boolean isExclusiveExceptionListInit = false; - - private static List exclusiveExceptionList = new ArrayList(); + private static String EXCEPTION_SPLIT = ","; + + private static Set exclusiveExceptionSet = null; @Override public void handleException(Throwable th) { - if (isExclusiveExceptionListInit == false) - synchronized (isExclusiveExceptionListInit) { - if (isExclusiveExceptionListInit == false) { - - isExclusiveExceptionListInit = true; - } + if (exclusiveExceptionSet == null) { + Set exclusiveExceptions = new HashSet(); + + String[] exceptions = EXCLUSIVE_EXCEPTIONS.split(EXCEPTION_SPLIT); + for(String exception : exceptions){ + exclusiveExceptions.add(exception); } + exclusiveExceptionSet = exclusiveExceptions; + } Span span = Context.getLastSpan(); - span.handleException(th, exclusiveExceptionList, Config.BuriedPoint.MAX_EXCEPTION_STACK_LENGTH); + span.handleException(th, exclusiveExceptionSet, + Config.BuriedPoint.MAX_EXCEPTION_STACK_LENGTH); } } diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java index 982ad058e..e87054aaa 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java @@ -17,6 +17,7 @@ public class Config { // Business Key 最大长度 public static int BUSINESSKEY_MAX_LENGTH = 300; + // 使用逗号分离 public static String EXCLUSIVE_EXCEPTIONS = ""; } diff --git a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java index d08777c70..72c859b70 100644 --- a/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java +++ b/skywalking-protocol/src/main/java/com/ai/cloud/skywalking/protocol/Span.java @@ -2,8 +2,7 @@ package com.ai.cloud.skywalking.protocol; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -137,24 +136,35 @@ public class Span extends SpanData { return str != null && str.length() > 0; } - public void handleException(Throwable e, - List exclusiveExceptionList, int maxExceptionStackLength) { - this.statusCode = 1; - ByteArrayOutputStream buf = new ByteArrayOutputStream(); + public void handleException(Throwable e, Set exclusiveExceptionSet, + int maxExceptionStackLength) { + ByteArrayOutputStream buf = null; StringBuilder expMessage = new StringBuilder(); - Throwable causeException = e; - while (causeException != null - && (causeException.getCause() != null || expMessage.length() < maxExceptionStackLength)) { - causeException.printStackTrace(new java.io.PrintWriter(buf, true)); - expMessage.append(buf.toString()); - causeException = causeException.getCause(); - } try { - buf.close(); - } catch (IOException e1) { - logger.log(Level.ALL, "Close exception stack input stream failed"); + buf = new ByteArrayOutputStream(); + Throwable causeException = e; + while (causeException != null + && (causeException.getCause() != null || expMessage + .length() < maxExceptionStackLength)) { + causeException.printStackTrace(new java.io.PrintWriter(buf, + true)); + expMessage.append(buf.toString()); + causeException = causeException.getCause(); + } + + } finally { + try { + buf.close(); + } catch (IOException ioe) { + logger.log(Level.ALL, + "Close exception stack input stream failed", ioe); + } } this.exceptionStack = expMessage.toString(); + + if (!exclusiveExceptionSet.contains(e.getClass().getName())) { + this.statusCode = 1; + } } } -- GitLab