From e921436515865b872a43faad2017d6a1f94e97ac Mon Sep 17 00:00:00 2001 From: ascrutae Date: Sat, 30 Jul 2016 07:27:53 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=A7=A3=E5=86=B3=E5=9C=A8Tomcat=E7=9A=84?= =?UTF-8?q?Classloader=E4=B8=8B=E5=8F=96=E4=B8=8D=E5=88=B0=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=96=87=E4=BB=B6=202.=20Log=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=80=E7=A7=8D=E6=A8=A1=E5=BC=8F,=E7=9B=B4=E6=8E=A5Console?= =?UTF-8?q?=E8=BE=93=E5=87=BA,Console=E8=BE=93=E5=87=BA=E5=8F=AA=E9=92=88?= =?UTF-8?q?=E5=AF=B9=E9=9D=9EPremain=E6=A8=A1=E5=BC=8F=E4=B8=8B=E6=89=8D?= =?UTF-8?q?=E4=BC=9A=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/sky-walking.auth | 10 ++--- .../skywalking/agent/SkywalkingAgent.java | 4 +- .../ai/cloud/skywalking/conf/AuthDesc.java | 39 +++++++++++++++++-- .../com/ai/cloud/skywalking/conf/Config.java | 2 + .../skywalking/conf/ConfigInitializer.java | 3 +- .../{IFileWriter.java => IWriter.java} | 2 +- .../ai/cloud/skywalking/logging/Logger.java | 5 ++- .../skywalking/logging/STDOutWriter.java | 10 +++++ .../skywalking/logging/SyncFileWriter.java | 4 +- .../skywalking/logging/WriterFactory.java | 17 ++++++++ 10 files changed, 78 insertions(+), 18 deletions(-) rename skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/{IFileWriter.java => IWriter.java} (71%) create mode 100644 skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/STDOutWriter.java create mode 100644 skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/WriterFactory.java diff --git a/samples/skywalking-auth/src/main/resources/sky-walking.auth b/samples/skywalking-auth/src/main/resources/sky-walking.auth index f58575d05..9be01f6e3 100644 --- a/samples/skywalking-auth/src/main/resources/sky-walking.auth +++ b/samples/skywalking-auth/src/main/resources/sky-walking.auth @@ -1,14 +1,15 @@ #skyWalking用户ID skywalking.user_id=123 #skyWalking应用编码 -skywalking.application_code=test +skywalking.application_code=skywalking-sample-dubbo #skywalking auth的环境变量名字 skywalking.auth_system_env_name=SKYWALKING_RUN #skywalking数据编码 skywalking.charset=UTF-8 +skywalking.auth_override=true #是否打印数据 -buriedpoint.printf=false +buriedpoint.printf=true #埋点异常的最大长度 buriedpoint.max_exception_stack_length=4000 #业务字段的最大长度 @@ -27,11 +28,8 @@ sender.max_send_length=20000 #当没有Sender时,尝试获取sender的等待周期 sender.retry_get_sender_wait_interval=2000 - - - #最大消费线程数 -consumer.max_consumer=2 +consumer.max_consumer=0 #消费者最大等待时间 consumer.max_wait_time=5 #发送失败等待时间 diff --git a/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java b/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java index 438b508fd..cdcf7f158 100644 --- a/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java +++ b/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java @@ -1,6 +1,7 @@ package com.ai.cloud.skywalking.agent; import com.ai.cloud.skywalking.conf.AuthDesc; +import com.ai.cloud.skywalking.conf.Config; import com.ai.cloud.skywalking.conf.ConfigInitializer; import com.ai.cloud.skywalking.logging.LogManager; import com.ai.cloud.skywalking.logging.Logger; @@ -19,9 +20,8 @@ public class SkywalkingAgent { private static Logger logger = LogManager.getLogger(SkywalkingAgent.class); public static void premain(String agentArgs, Instrumentation instrumentation) throws PluginException { - ConfigInitializer.initialize(); + Config.SkyWalking.IS_PREMAIN_MODE = true; if (!AuthDesc.isAuth()) { - List plugins = new PluginBootstrap().loadPlugins(); final PluginDefineCategory pluginDefineCategory = PluginDefineCategory.category(plugins); diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java index f03a81914..91ea39edf 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java @@ -1,17 +1,50 @@ package com.ai.cloud.skywalking.conf; +import com.ai.cloud.skywalking.logging.LogManager; +import com.ai.cloud.skywalking.logging.Logger; import com.ai.cloud.skywalking.selfexamination.SDKHealthCollector; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; + public class AuthDesc { - static boolean isAuth = false; + private static Logger logger = LogManager.getLogger(AuthDesc.class); + static boolean isAuth = false; static { - ConfigInitializer.initialize(); + InputStream authFileInputStream; + if (Config.SkyWalking.IS_PREMAIN_MODE) { + authFileInputStream = fetchAuthFileInputStream(); + } else { + authFileInputStream = AuthDesc.class.getResourceAsStream("/sky-walking.auth"); + } + + ConfigInitializer.initialize(authFileInputStream); ConfigValidator.validate(); - SDKHealthCollector.init(); } + private static InputStream fetchAuthFileInputStream() { + try { + InputStream authFileInputStream; + String urlString = ClassLoader.getSystemClassLoader().getResource(generateLocationPath()).toString(); + urlString = urlString.substring(urlString.indexOf("file:"), urlString.indexOf('!')); + URL url = new URL(urlString); + File file = new File(url.toURI()); + authFileInputStream = new FileInputStream(file.getParentFile().getName() + File.separator + "/sky-walking.auth"); + return authFileInputStream; + } catch (Exception e) { + logger.error("Error to fetch auth file input stream.", e); + return null; + } + } + + private static String generateLocationPath() { + return AuthDesc.class.getName().replaceAll(".", "/") + ".class"; + } + public static boolean isAuth() { return isAuth; } diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java index dd5308038..4a57a1b6f 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java @@ -14,6 +14,8 @@ public class Config { public static String CHARSET = "UTF-8"; public static boolean ALL_METHOD_MONITOR = false; + + public static boolean IS_PREMAIN_MODE = false; } public static class BuriedPoint { diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/ConfigInitializer.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/ConfigInitializer.java index 24f0398e0..1e61a57d7 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/ConfigInitializer.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/ConfigInitializer.java @@ -16,8 +16,7 @@ import java.util.Properties; public class ConfigInitializer { private static Logger logger = LogManager.getLogger(ConfigInitializer.class); - public static void initialize() { - InputStream inputStream = ConfigInitializer.class.getResourceAsStream("/sky-walking.auth"); + static void initialize(InputStream inputStream) { if (inputStream == null) { logger.info("No provider sky-walking certification documents, sky-walking api auto shutdown."); } else { diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IFileWriter.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IWriter.java similarity index 71% rename from skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IFileWriter.java rename to skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IWriter.java index 1a297dee2..3188d2a40 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IFileWriter.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IWriter.java @@ -1,5 +1,5 @@ package com.ai.cloud.skywalking.logging; -public interface IFileWriter { +public interface IWriter { void write(String message); } diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java index 86fe9e2ed..5b6353f40 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java @@ -13,6 +13,7 @@ public class Logger { private Class toBeLoggerClass; + public Logger(Class toBeLoggerClass) { this.toBeLoggerClass = toBeLoggerClass; } @@ -22,11 +23,11 @@ public class Logger { StackTraceElement locations[] = dummyException.getStackTrace(); if (locations != null && locations.length > 2) { - SyncFileWriter.instance().write(formatMessage(level, message, locations[2])); + WriterFactory.getLogWriter().write(formatMessage(level, message, locations[2])); } if (e != null) { - SyncFileWriter.instance().write(LoggingUtil.fetchThrowableStack(e)); + WriterFactory.getLogWriter().write(LoggingUtil.fetchThrowableStack(e)); } } diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/STDOutWriter.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/STDOutWriter.java new file mode 100644 index 000000000..9e88ed613 --- /dev/null +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/STDOutWriter.java @@ -0,0 +1,10 @@ +package com.ai.cloud.skywalking.logging; + +public class STDOutWriter implements IWriter { + + + @Override + public void write(String message) { + System.err.println(message); + } +} diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/SyncFileWriter.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/SyncFileWriter.java index 4a9a107de..dbb6bbf9d 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/SyncFileWriter.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/SyncFileWriter.java @@ -14,7 +14,7 @@ import java.util.Date; import static com.ai.cloud.skywalking.conf.Config.Logging.LOG_FILE_NAME; import static com.ai.cloud.skywalking.conf.Config.Logging.LOG_FILE_PATH; -public class SyncFileWriter implements IFileWriter { +public class SyncFileWriter implements IWriter { private static SyncFileWriter writer; private FileOutputStream os; @@ -35,7 +35,7 @@ public class SyncFileWriter implements IFileWriter { } - public static IFileWriter instance() { + public static IWriter instance() { if (writer == null) { writer = new SyncFileWriter(); } diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/WriterFactory.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/WriterFactory.java new file mode 100644 index 000000000..ebedd71b3 --- /dev/null +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/WriterFactory.java @@ -0,0 +1,17 @@ +package com.ai.cloud.skywalking.logging; + +import com.ai.cloud.skywalking.conf.Config; + +public class WriterFactory { + private WriterFactory(){ + } + + public static IWriter getLogWriter(){ + if (Config.SkyWalking.IS_PREMAIN_MODE){ + return SyncFileWriter.instance(); + }else{ + return new STDOutWriter(); + } + + } +}