Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
山不在高_有仙则灵
SkyWalking
提交
aa5ae551
S
SkyWalking
项目概览
山不在高_有仙则灵
/
SkyWalking
与 Fork 源项目一致
Fork自
apache / SkyWalking
通知
12
Star
0
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
aa5ae551
编写于
6月 26, 2016
作者:
A
ascrutae
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1.提交日志功能以及测试类 2. 将SDK切换成新的日志功能
上级
f286cbd7
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
461 addition
and
181 deletion
+461
-181
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferGroup.java
...main/java/com/ai/cloud/skywalking/buffer/BufferGroup.java
+2
-2
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/ContextBuffer.java
...in/java/com/ai/cloud/skywalking/buffer/ContextBuffer.java
+2
-2
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java
...d/skywalking/buriedpoint/ApplicationExceptionHandler.java
+2
-2
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
.../cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
+2
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
.../cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
+2
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
...cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
+2
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
...kywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
+2
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java
...pi/src/main/java/com/ai/cloud/skywalking/conf/Config.java
+14
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/ConfigInitializer.java
.../java/com/ai/cloud/skywalking/conf/ConfigInitializer.java
+3
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IFileWriter.java
...ain/java/com/ai/cloud/skywalking/logging/IFileWriter.java
+5
-0
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/LogManager.java
...main/java/com/ai/cloud/skywalking/logging/LogManager.java
+11
-0
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java
...src/main/java/com/ai/cloud/skywalking/logging/Logger.java
+106
-0
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/LoggerManager.java
...n/java/com/ai/cloud/skywalking/logging/LoggerManager.java
+11
-0
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/SyncFileWriter.java
.../java/com/ai/cloud/skywalking/logging/SyncFileWriter.java
+112
-0
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java
.../java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java
+38
-40
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginResourcesResolver.java
...m/ai/cloud/skywalking/plugin/PluginResourcesResolver.java
+3
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/TracingBootstrap.java
...java/com/ai/cloud/skywalking/plugin/TracingBootstrap.java
+3
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/AbstractClassEnhancePluginDefine.java
.../plugin/interceptor/AbstractClassEnhancePluginDefine.java
+3
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/enhance/ClassConstructorInterceptor.java
...ugin/interceptor/enhance/ClassConstructorInterceptor.java
+2
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/enhance/ClassEnhancePluginDefine.java
.../plugin/interceptor/enhance/ClassEnhancePluginDefine.java
+3
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/enhance/ClassInstanceMethodsInterceptor.java
.../interceptor/enhance/ClassInstanceMethodsInterceptor.java
+54
-62
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/selfexamination/SDKHealthCollector.java
.../cloud/skywalking/selfexamination/SDKHealthCollector.java
+2
-3
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactoryWithBalance.java
...cloud/skywalking/sender/DataSenderFactoryWithBalance.java
+27
-37
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/LoggingUtil.java
...c/main/java/com/ai/cloud/skywalking/util/LoggingUtil.java
+23
-0
skywalking-collector/skywalking-api/src/test/java/test/ai/cloud/logging/LoggingTest.java
...-api/src/test/java/test/ai/cloud/logging/LoggingTest.java
+27
-0
未找到文件。
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/BufferGroup.java
浏览文件 @
aa5ae551
...
...
@@ -2,13 +2,13 @@ package com.ai.cloud.skywalking.buffer;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.conf.Constants
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.protocol.Span
;
import
com.ai.cloud.skywalking.selfexamination.HeathReading
;
import
com.ai.cloud.skywalking.selfexamination.SDKHealthCollector
;
import
com.ai.cloud.skywalking.sender.DataSenderFactoryWithBalance
;
import
com.ai.cloud.skywalking.util.AtomicRangeInteger
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Buffer
.
BUFFER_MAX_SIZE
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Consumer
.*;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buffer/ContextBuffer.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.buffer
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.protocol.Span
;
import
java.util.concurrent.ThreadLocalRandom
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Buffer
.
POOL_SIZE
;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ApplicationExceptionHandler.java
浏览文件 @
aa5ae551
...
...
@@ -5,12 +5,12 @@ import static com.ai.cloud.skywalking.conf.Config.BuriedPoint.EXCLUSIVE_EXCEPTIO
import
java.util.HashSet
;
import
java.util.Set
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.api.IExceptionHandler
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.protocol.Span
;
public
class
ApplicationExceptionHandler
implements
IExceptionHandler
{
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/LocalBuriedPointSender.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.buriedpoint
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.api.IBuriedPointSender
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.model.EmptyContextData
;
import
com.ai.cloud.skywalking.model.Identification
;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/RPCBuriedPointReceiver.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.buriedpoint
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.api.IBuriedPointReceiver
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.model.Identification
;
import
com.ai.cloud.skywalking.protocol.Span
;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadBuriedPointSender.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.buriedpoint
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.api.IBuriedPointSender
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.model.EmptyContextData
;
import
com.ai.cloud.skywalking.model.Identification
;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/buriedpoint/ThreadFactoryBuriedPointSender.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.buriedpoint
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.api.IBuriedPointSender
;
import
com.ai.cloud.skywalking.buffer.ContextBuffer
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.context.Context
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.model.ContextData
;
import
com.ai.cloud.skywalking.model.EmptyContextData
;
import
com.ai.cloud.skywalking.model.Identification
;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java
浏览文件 @
aa5ae551
...
...
@@ -71,9 +71,20 @@ public class Config {
public
static
long
RETRY_FIND_CONNECTION_SENDER
=
1000
;
}
public
static
class
HealthCollector
{
// 默认健康检查上报时间
public
static
long
REPORT_INTERVAL
=
5
*
60
*
1000L
;
// 默认健康检查上报时间
public
static
long
REPORT_INTERVAL
=
5
*
60
*
1000L
;
}
public
static
class
Logging
{
// log文件名
public
static
String
LOG_FILE_NAME
=
"skywalking-api.log"
;
// log文件路径
public
static
String
LOG_FILE_PATH
=
"/home/xin/tmp"
;
// 最大文件大小
public
static
int
MAX_LOG_FILE_LENGTH
=
3
*
1024
*
1024
;
// skywalking 系统错误文件日志
public
static
String
SYSTEM_ERROR_LOG_FILE_NAME
=
"skywalking-api-error.log"
;
}
}
\ No newline at end of file
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/ConfigInitializer.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.conf
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
SkyWalking
.
AUTH_OVERRIDE
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
SkyWalking
.
AUTH_SYSTEM_ENV_NAME
;
...
...
@@ -10,9 +13,6 @@ import java.lang.reflect.Modifier;
import
java.util.LinkedList
;
import
java.util.Properties
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
public
class
ConfigInitializer
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
ConfigInitializer
.
class
);
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/IFileWriter.java
0 → 100644
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.logging
;
public
interface
IFileWriter
{
void
write
(
String
message
);
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/LogManager.java
0 → 100644
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.logging
;
/**
* Created by xin on 16-6-23.
*/
public
class
LogManager
{
public
static
Logger
getLogger
(
Class
toBeLoggerClass
)
{
return
new
Logger
(
toBeLoggerClass
);
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/Logger.java
0 → 100644
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.logging
;
import
com.ai.cloud.skywalking.util.LoggingUtil
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
/**
* Created by xin on 16-6-23.
*/
public
class
Logger
{
private
Class
toBeLoggerClass
;
public
Logger
(
Class
toBeLoggerClass
)
{
this
.
toBeLoggerClass
=
toBeLoggerClass
;
}
public
void
logger
(
String
level
,
String
message
,
Throwable
e
)
{
Throwable
dummyException
=
new
Throwable
();
StackTraceElement
locations
[]
=
dummyException
.
getStackTrace
();
if
(
locations
!=
null
&&
locations
.
length
>
2
)
{
SyncFileWriter
.
instance
().
write
(
formatMessage
(
level
,
message
,
locations
[
2
]));
}
if
(
e
!=
null
)
{
SyncFileWriter
.
instance
().
write
(
LoggingUtil
.
fetchThrowableStack
(
e
));
}
}
public
void
error
(
String
message
,
Throwable
e
)
{
logger
(
ERROR
,
message
,
e
);
}
public
void
error
(
String
message
)
{
error
(
message
,
null
);
}
public
void
warn
(
String
message
,
Object
...
parameters
)
{
String
tmpMessage
=
replaceParameter
(
message
,
parameters
);
logger
(
WARN
,
tmpMessage
,
null
);
}
public
void
debug
(
String
message
)
{
logger
(
DEBUG
,
message
,
null
);
}
public
void
debug
(
Object
message
)
{
debug
(
message
.
toString
());
}
public
void
info
(
Object
message
)
{
info
(
message
.
toString
());
}
public
void
info
(
String
message
)
{
logger
(
INFO
,
message
,
null
);
}
public
void
debug
(
String
message
,
Object
...
parameters
)
{
debug
(
replaceParameter
(
message
,
parameters
));
}
public
void
error
(
String
message
,
Object
[]
parameters
,
Throwable
throwable
)
{
logger
(
ERROR
,
replaceParameter
(
message
,
parameters
),
throwable
);
}
public
void
info
(
String
message
,
Object
paramter
)
{
info
(
replaceParameter
(
message
,
new
Object
[]{
paramter
}));
}
private
String
replaceParameter
(
String
message
,
Object
...
parameters
)
{
int
startSize
=
0
;
int
parametersIndex
=
0
;
int
index
=
-
1
;
String
tmpMessage
=
message
;
while
((
index
=
message
.
indexOf
(
"{}"
,
startSize
))
!=
-
1
)
{
if
(
parametersIndex
>=
parameters
.
length
)
{
break
;
}
tmpMessage
=
tmpMessage
.
replaceFirst
(
"\\{\\}"
,
parameters
[
parametersIndex
++].
toString
());
startSize
=
index
+
2
;
}
return
tmpMessage
;
}
private
String
formatMessage
(
String
level
,
String
message
,
StackTraceElement
caller
)
{
return
level
+
" "
+
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
())
+
" "
+
caller
.
getClassName
()
+
"."
+
caller
.
getMethodName
()
+
"("
+
caller
.
getFileName
()
+
":"
+
caller
.
getLineNumber
()
+
") "
+
message
;
}
private
static
final
String
ERROR
=
"ERROR"
;
private
static
final
String
WARN
=
"WARN"
;
private
static
final
String
DEBUG
=
"DEBUG"
;
private
static
final
String
INFO
=
"INFO"
;
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/LoggerManager.java
0 → 100644
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.logging
;
/**
* Created by xin on 16-6-23.
*/
public
class
LoggerManager
{
public
static
Logger
getLog
(
Class
toBeClass
)
{
return
new
Logger
(
toBeClass
);
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/logging/SyncFileWriter.java
0 → 100644
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.logging
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.util.LoggingUtil
;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.text.SimpleDateFormat
;
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
{
private
static
SyncFileWriter
writer
;
private
FileOutputStream
os
;
private
int
bufferSize
;
private
static
final
Object
lock
=
new
Object
();
private
SyncFileWriter
()
{
try
{
os
=
new
FileOutputStream
(
new
File
(
LOG_FILE_PATH
,
LOG_FILE_NAME
),
true
);
bufferSize
=
Long
.
valueOf
(
new
File
(
LOG_FILE_PATH
,
LOG_FILE_NAME
).
length
()).
intValue
();
}
catch
(
IOException
e
)
{
writeErrorLog
(
e
);
}
}
public
static
IFileWriter
instance
()
{
if
(
writer
==
null
)
{
writer
=
new
SyncFileWriter
();
}
return
writer
;
}
public
void
write
(
String
message
)
{
writeLogRecord
(
message
);
switchLogFileIfNecessary
();
}
private
void
writeLogRecord
(
String
message
)
{
try
{
os
.
write
(
message
.
getBytes
());
os
.
write
(
"\n"
.
getBytes
());
bufferSize
+=
message
.
length
();
}
catch
(
IOException
e
)
{
writeErrorLog
(
e
);
}
}
private
void
switchLogFileIfNecessary
()
{
if
(
bufferSize
>
Config
.
Logging
.
MAX_LOG_FILE_LENGTH
)
{
synchronized
(
lock
)
{
if
(
bufferSize
>
Config
.
Logging
.
MAX_LOG_FILE_LENGTH
)
{
try
{
closeInputStream
();
renameLogFile
();
revertInputStream
();
}
catch
(
IOException
e
)
{
writeErrorLog
(
e
);
}
bufferSize
=
0
;
}
}
}
}
private
void
revertInputStream
()
throws
FileNotFoundException
{
os
=
new
FileOutputStream
(
new
File
(
Config
.
Logging
.
LOG_FILE_PATH
,
Config
.
Logging
.
LOG_FILE_NAME
),
true
);
}
private
void
renameLogFile
()
{
new
File
(
Config
.
Logging
.
LOG_FILE_PATH
,
Config
.
Logging
.
LOG_FILE_NAME
)
.
renameTo
(
new
File
(
Config
.
Logging
.
LOG_FILE_PATH
,
Config
.
Logging
.
LOG_FILE_NAME
+
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
())));
}
private
void
closeInputStream
()
throws
IOException
{
this
.
os
.
flush
();
this
.
os
.
close
();
}
private
void
writeErrorLog
(
Throwable
e
)
{
FileOutputStream
fileOutputStream
=
null
;
try
{
File
file
=
new
File
(
Config
.
Logging
.
LOG_FILE_PATH
,
Config
.
Logging
.
SYSTEM_ERROR_LOG_FILE_NAME
);
fileOutputStream
=
new
FileOutputStream
(
file
,
true
);
fileOutputStream
.
write
((
"Failed to init sync File Writer.\n"
+
LoggingUtil
.
fetchThrowableStack
(
e
)).
getBytes
());
}
catch
(
Exception
e1
)
{
System
.
err
.
print
(
LoggingUtil
.
fetchThrowableStack
(
e1
));
}
finally
{
if
(
fileOutputStream
!=
null
)
{
try
{
fileOutputStream
.
close
();
}
catch
(
IOException
e1
)
{
System
.
err
.
print
(
LoggingUtil
.
fetchThrowableStack
(
e1
));
}
}
}
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginBootstrap.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.plugin
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
net.bytebuddy.pool.TypePool
;
import
java.net.URL
;
import
java.util.List
;
import
net.bytebuddy.pool.TypePool
;
public
class
PluginBootstrap
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
PluginBootstrap
.
class
);
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
public
static
TypePool
CLASS_TYPE_POOL
=
null
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
public
void
start
()
{
if
(!
AuthDesc
.
isAuth
())
{
return
;
}
public
class
PluginBootstrap
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
PluginBootstrap
.
class
);
public
static
TypePool
CLASS_TYPE_POOL
=
null
;
public
void
start
()
{
if
(!
AuthDesc
.
isAuth
())
{
return
;
}
CLASS_TYPE_POOL
=
TypePool
.
Default
.
ofClassPath
();
PluginResourcesResolver
resolver
=
new
PluginResourcesResolver
();
List
<
URL
>
resources
=
resolver
.
getResources
();
if
(
resources
==
null
||
resources
.
size
()
==
0
)
{
logger
.
info
(
"no plugin files (skywalking-plugin.properties) found, continue to start application."
);
return
;
}
for
(
URL
pluginUrl
:
resources
)
{
try
{
PluginCfg
.
CFG
.
load
(
pluginUrl
.
openStream
());
}
catch
(
Throwable
t
)
{
logger
.
error
(
"plugin [{}] init failure."
,
pluginUrl
,
t
);
}
}
List
<
String
>
pluginClassList
=
PluginCfg
.
CFG
CLASS_TYPE_POOL
=
TypePool
.
Default
.
ofClassPath
();
PluginResourcesResolver
resolver
=
new
PluginResourcesResolver
();
List
<
URL
>
resources
=
resolver
.
getResources
();
if
(
resources
==
null
||
resources
.
size
()
==
0
)
{
logger
.
info
(
"no plugin files (skywalking-plugin.properties) found, continue to start application."
);
return
;
}
for
(
URL
pluginUrl
:
resources
)
{
try
{
PluginCfg
.
CFG
.
load
(
pluginUrl
.
openStream
());
}
catch
(
Throwable
t
)
{
logger
.
error
(
"plugin [{}] init failure."
,
new
Object
[]{
pluginUrl
},
t
);
}
}
List
<
String
>
pluginClassList
=
PluginCfg
.
CFG
.
getPluginClassList
();
for
(
String
pluginClassName
:
pluginClassList
)
{
try
{
logger
.
debug
(
"prepare to enhance class by plugin {}."
,
pluginClassName
);
IPlugin
plugin
=
(
IPlugin
)
Class
.
forName
(
pluginClassName
).
newInstance
();
plugin
.
define
();
logger
.
debug
(
"prepare to enhance class by plugin {}."
,
pluginClassName
);
IPlugin
plugin
=
(
IPlugin
)
Class
.
forName
(
pluginClassName
).
newInstance
();
plugin
.
define
();
}
catch
(
Throwable
t
)
{
logger
.
error
(
"prepare to enhance class by plugin [{}] failure."
,
pluginClassName
,
t
);
new
Object
[]{
pluginClassName
}
,
t
);
}
}
}
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/PluginResourcesResolver.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.plugin
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
java.io.IOException
;
import
java.net.URL
;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
import
java.util.List
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
public
class
PluginResourcesResolver
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
PluginResourcesResolver
.
class
);
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/TracingBootstrap.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.plugin
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
java.lang.reflect.InvocationTargetException
;
import
java.util.Arrays
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
/**
* 替代应用函数的main函数入口,确保在程序入口处运行 <br/>
* 用于替代-javaagent的另一种模式 <br/>
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/AbstractClassEnhancePluginDefine.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.plugin.interceptor
;
import
static
com
.
ai
.
cloud
.
skywalking
.
plugin
.
PluginBootstrap
.
CLASS_TYPE_POOL
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
net.bytebuddy.ByteBuddy
;
import
net.bytebuddy.dynamic.ClassFileLocator
;
import
net.bytebuddy.dynamic.DynamicType
;
import
net.bytebuddy.dynamic.loading.ClassLoadingStrategy
;
import
net.bytebuddy.pool.TypePool.Resolution
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.plugin.IPlugin
;
import
com.ai.cloud.skywalking.plugin.PluginException
;
import
com.ai.cloud.skywalking.util.StringUtil
;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/enhance/ClassConstructorInterceptor.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.plugin.interceptor.enhance
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
net.bytebuddy.implementation.bind.annotation.AllArguments
;
import
net.bytebuddy.implementation.bind.annotation.FieldProxy
;
import
net.bytebuddy.implementation.bind.annotation.RuntimeType
;
import
net.bytebuddy.implementation.bind.annotation.This
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext
;
public
class
ClassConstructorInterceptor
{
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/enhance/ClassEnhancePluginDefine.java
浏览文件 @
aa5ae551
...
...
@@ -2,6 +2,9 @@ package com.ai.cloud.skywalking.plugin.interceptor.enhance;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
any
;
import
static
net
.
bytebuddy
.
matcher
.
ElementMatchers
.
not
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
net.bytebuddy.description.method.MethodDescription
;
import
net.bytebuddy.dynamic.DynamicType
;
import
net.bytebuddy.implementation.MethodDelegation
;
...
...
@@ -10,9 +13,6 @@ import net.bytebuddy.implementation.bind.annotation.FieldProxy;
import
net.bytebuddy.matcher.ElementMatcher
;
import
net.bytebuddy.matcher.ElementMatchers
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.plugin.PluginException
;
import
com.ai.cloud.skywalking.plugin.interceptor.AbstractClassEnhancePluginDefine
;
import
com.ai.cloud.skywalking.plugin.interceptor.EnhanceException
;
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/enhance/ClassInstanceMethodsInterceptor.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.plugin.interceptor.enhance
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext
;
import
net.bytebuddy.implementation.bind.annotation.*
;
import
java.lang.reflect.Method
;
import
java.util.concurrent.Callable
;
import
net.bytebuddy.implementation.bind.annotation.AllArguments
;
import
net.bytebuddy.implementation.bind.annotation.FieldValue
;
import
net.bytebuddy.implementation.bind.annotation.Origin
;
import
net.bytebuddy.implementation.bind.annotation.RuntimeType
;
import
net.bytebuddy.implementation.bind.annotation.SuperCall
;
import
net.bytebuddy.implementation.bind.annotation.This
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext
;
/**
* 类方法拦截、控制器
*
* @author wusheng
*
* @author wusheng
*/
public
class
ClassInstanceMethodsInterceptor
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
ClassInstanceMethodsInterceptor
.
class
);
private
static
Logger
logger
=
LogManager
.
getLogger
(
ClassInstanceMethodsInterceptor
.
class
);
private
IntanceMethodsAroundInterceptor
interceptor
;
private
IntanceMethodsAroundInterceptor
interceptor
;
public
ClassInstanceMethodsInterceptor
(
IntanceMethodsAroundInterceptor
interceptor
)
{
this
.
interceptor
=
interceptor
;
}
public
ClassInstanceMethodsInterceptor
(
IntanceMethodsAroundInterceptor
interceptor
)
{
this
.
interceptor
=
interceptor
;
}
@RuntimeType
public
Object
intercept
(
@This
Object
obj
,
@AllArguments
Object
[]
allArguments
,
@Origin
Method
method
,
@SuperCall
Callable
<?>
zuper
,
@FieldValue
(
ClassEnhancePluginDefine
.
contextAttrName
)
EnhancedClassInstanceContext
instanceContext
)
throws
Exception
{
InstanceMethodInvokeContext
interceptorContext
=
new
InstanceMethodInvokeContext
(
obj
,
method
.
getName
(),
allArguments
);
MethodInterceptResult
result
=
new
MethodInterceptResult
();
try
{
interceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
result
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
"class[{}] before method[{}] intercept failue:{}"
,
new
Object
[]{
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
()},
t
);
}
if
(!
result
.
isContinue
())
{
return
result
.
_ret
();
}
@RuntimeType
public
Object
intercept
(
@This
Object
obj
,
@AllArguments
Object
[]
allArguments
,
@Origin
Method
method
,
@SuperCall
Callable
<?>
zuper
,
@FieldValue
(
ClassEnhancePluginDefine
.
contextAttrName
)
EnhancedClassInstanceContext
instanceContext
)
throws
Exception
{
InstanceMethodInvokeContext
interceptorContext
=
new
InstanceMethodInvokeContext
(
obj
,
method
.
getName
(),
allArguments
);
MethodInterceptResult
result
=
new
MethodInterceptResult
();
try
{
interceptor
.
beforeMethod
(
instanceContext
,
interceptorContext
,
result
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
"class[{}] before method[{}] intercept failue:{}"
,
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
(),
t
);
}
if
(!
result
.
isContinue
()){
return
result
.
_ret
();
}
Object
ret
=
null
;
try
{
ret
=
zuper
.
call
();
}
catch
(
Throwable
t
){
try
{
interceptor
.
handleMethodException
(
t
,
instanceContext
,
interceptorContext
,
ret
);
}
catch
(
Throwable
t2
)
{
logger
.
error
(
"class[{}] handle method[{}] exception failue:{}"
,
obj
.
getClass
(),
method
.
getName
(),
t2
.
getMessage
(),
t2
);
}
throw
t
;
}
finally
{
try
{
ret
=
interceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
ret
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
"class[{}] after method[{}] intercept failue:{}"
,
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
(),
t
);
}
}
return
ret
;
}
Object
ret
=
null
;
try
{
ret
=
zuper
.
call
();
}
catch
(
Throwable
t
)
{
try
{
interceptor
.
handleMethodException
(
t
,
instanceContext
,
interceptorContext
,
ret
);
}
catch
(
Throwable
t2
)
{
logger
.
error
(
"class[{}] handle method[{}] exception failue:{}"
,
new
Object
[]{
obj
.
getClass
(),
method
.
getName
(),
t2
.
getMessage
()},
t2
);
}
throw
t
;
}
finally
{
try
{
ret
=
interceptor
.
afterMethod
(
instanceContext
,
interceptorContext
,
ret
);
}
catch
(
Throwable
t
)
{
logger
.
error
(
"class[{}] after method[{}] intercept failue:{}"
,
new
Object
[]{
obj
.
getClass
(),
method
.
getName
(),
t
.
getMessage
()},
t
);
}
}
return
ret
;
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/selfexamination/SDKHealthCollector.java
浏览文件 @
aa5ae551
...
...
@@ -4,11 +4,10 @@ import java.util.Arrays;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.conf.AuthDesc
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.util.BuriedPointMachineUtil
;
public
class
SDKHealthCollector
extends
Thread
{
...
...
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderFactoryWithBalance.java
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.sender
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Sender
.
CHECKER_THREAD_WAIT_INTERVAL
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Sender
.
CLOSE_SENDER_COUNTDOWN
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Sender
.
CONNECT_PERCENT
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Sender
.
RETRY_GET_SENDER_WAIT_INTERVAL
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Sender
.
SWITCH_SENDER_INTERVAL
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
com.ai.cloud.skywalking.selfexamination.HeathReading
;
import
com.ai.cloud.skywalking.selfexamination.SDKHealthCollector
;
import
com.ai.cloud.skywalking.util.StringUtil
;
import
java.io.IOException
;
import
java.net.InetSocketAddress
;
import
java.util.ArrayList
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.*
;
import
java.util.concurrent.ThreadLocalRandom
;
import
org.apache.logging.log4j.Level
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.selfexamination.HeathReading
;
import
com.ai.cloud.skywalking.selfexamination.SDKHealthCollector
;
import
com.ai.cloud.skywalking.util.StringUtil
;
import
static
com
.
ai
.
cloud
.
skywalking
.
conf
.
Config
.
Sender
.*;
public
class
DataSenderFactoryWithBalance
{
private
static
Logger
logger
=
LogManager
.
getLogger
(
DataSenderFactoryWithBalance
.
class
);
private
static
Logger
logger
=
LogManager
.
getLogger
(
DataSenderFactoryWithBalance
.
class
);
// unUsedServerAddress存放没有使用的服务器地址,
private
static
List
<
InetSocketAddress
>
unusedServerAddresses
=
new
ArrayList
<
InetSocketAddress
>();
...
...
@@ -171,7 +161,7 @@ public class DataSenderFactoryWithBalance {
try
{
Thread
.
sleep
(
CLOSE_SENDER_COUNTDOWN
);
}
catch
(
InterruptedException
e
)
{
logger
.
log
(
Level
.
ALL
,
"Sleep Failed"
);
logger
.
error
(
"Sleep Failed"
,
e
);
}
toBeSwitchSender
.
close
();
unusedServerAddresses
.
remove
(
tmpSender
...
...
@@ -184,10 +174,10 @@ public class DataSenderFactoryWithBalance {
sleepTime
=
0
;
}
}
catch
(
Throwable
e
)
{
SDKHealthCollector
.
getCurrentHeathReading
(
null
).
updateData
(
HeathReading
.
ERROR
,
"DataSenderChecker running failed:"
+
e
.
getMessage
());
SDKHealthCollector
.
getCurrentHeathReading
(
null
).
updateData
(
HeathReading
.
ERROR
,
"DataSenderChecker running failed:"
+
e
.
getMessage
());
logger
.
error
(
"DataSenderChecker running failed"
,
e
);
}
finally
{
SDKHealthCollector
.
getCurrentHeathReading
(
null
).
updateData
(
HeathReading
.
INFO
,
"using available DataSender connect to: "
+
listUsingServers
());
}
finally
{
SDKHealthCollector
.
getCurrentHeathReading
(
null
).
updateData
(
HeathReading
.
INFO
,
"using available DataSender connect to: "
+
listUsingServers
());
}
sleepTime
+=
CHECKER_THREAD_WAIT_INTERVAL
;
...
...
@@ -205,7 +195,7 @@ public class DataSenderFactoryWithBalance {
DataSender
result
=
null
;
int
index
=
0
;
if
(
unusedServerAddresses
.
size
()
>
1
){
if
(
unusedServerAddresses
.
size
()
>
1
)
{
index
=
ThreadLocalRandom
.
current
().
nextInt
(
0
,
unusedServerAddresses
.
size
());
}
...
...
@@ -232,19 +222,19 @@ public class DataSenderFactoryWithBalance {
}
public
static
void
unRegister
(
DataSender
socket
)
{
socket
.
setStatus
(
DataSender
.
SenderStatus
.
FAILED
);
socket
.
setStatus
(
DataSender
.
SenderStatus
.
FAILED
);
}
private
static
String
listUsingServers
(){
StringBuilder
usingAddrDesc
=
new
StringBuilder
();
if
(
usingDataSender
.
size
()
>
0
)
{
for
(
DataSender
sender
:
usingDataSender
)
{
if
(
usingAddrDesc
.
length
()
>
0
)
{
usingAddrDesc
.
append
(
","
);
}
usingAddrDesc
.
append
(
sender
.
getServerAddr
().
toString
());
}
}
return
usingAddrDesc
.
toString
();
private
static
String
listUsingServers
()
{
StringBuilder
usingAddrDesc
=
new
StringBuilder
();
if
(
usingDataSender
.
size
()
>
0
)
{
for
(
DataSender
sender
:
usingDataSender
)
{
if
(
usingAddrDesc
.
length
()
>
0
)
{
usingAddrDesc
.
append
(
","
);
}
usingAddrDesc
.
append
(
sender
.
getServerAddr
().
toString
());
}
}
return
usingAddrDesc
.
toString
();
}
}
skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/LoggingUtil.java
0 → 100644
浏览文件 @
aa5ae551
package
com.ai.cloud.skywalking.util
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
/**
* Created by xin on 16-6-24.
*/
public
class
LoggingUtil
{
public
static
String
fetchThrowableStack
(
Throwable
e
)
{
ByteArrayOutputStream
buf
=
new
ByteArrayOutputStream
();
e
.
printStackTrace
(
new
java
.
io
.
PrintWriter
(
buf
,
true
));
String
expMessage
=
buf
.
toString
();
try
{
buf
.
close
();
}
catch
(
IOException
e1
)
{
System
.
err
.
println
(
"Failed to close throwable stack stream."
);
e
.
printStackTrace
();
}
return
expMessage
;
}
}
skywalking-collector/skywalking-api/src/test/java/test/ai/cloud/logging/LoggingTest.java
0 → 100644
浏览文件 @
aa5ae551
package
test.ai.cloud.logging
;
import
com.ai.cloud.skywalking.conf.Config
;
import
com.ai.cloud.skywalking.logging.LogManager
;
import
com.ai.cloud.skywalking.logging.Logger
;
import
org.junit.Test
;
public
class
LoggingTest
{
Logger
logger
=
LogManager
.
getLogger
(
LoggingTest
.
class
);
@Test
public
void
testNormalLogging
()
{
logger
.
debug
(
"Hello World"
);
}
@Test
public
void
testErrorLogging
()
{
logger
.
error
(
"Hello World"
,
new
RuntimeException
(
"Failed message"
));
}
@Test
public
void
testConvertFile
()
{
Config
.
Logging
.
MAX_LOG_FILE_LENGTH
=
2400
;
logger
.
error
(
"Hello World"
,
new
RuntimeException
(
"Failed message"
));
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录