|
@@ -0,0 +1,129 @@
|
|
|
+package org.example;
|
|
|
+
|
|
|
+import com.aliyun.openservices.aliyun.log.producer.LogProducer;
|
|
|
+import com.aliyun.openservices.aliyun.log.producer.Producer;
|
|
|
+import com.aliyun.openservices.aliyun.log.producer.ProducerConfig;
|
|
|
+import com.aliyun.openservices.aliyun.log.producer.ProjectConfig;
|
|
|
+import com.aliyun.openservices.aliyun.log.producer.errors.ProducerException;
|
|
|
+import com.aliyun.openservices.log.common.LogItem;
|
|
|
+import lombok.SneakyThrows;
|
|
|
+
|
|
|
+import java.io.PrintWriter;
|
|
|
+import java.io.StringWriter;
|
|
|
+
|
|
|
+public class AliyunLogger {
|
|
|
+ private Producer producer;
|
|
|
+ private String logStore = "java-log";
|
|
|
+ private final String project = "k8s-log-c4d23a31b8c6c4ed49e7fc1473dfd0c57";
|
|
|
+
|
|
|
+ private final String app = "daka";
|
|
|
+
|
|
|
+
|
|
|
+ public void init() {
|
|
|
+
|
|
|
+
|
|
|
+ ProducerConfig producerConfig = new ProducerConfig();
|
|
|
+ producerConfig.setBatchSizeThresholdInBytes(3 * 1024 * 1024);
|
|
|
+ producerConfig.setBatchCountThreshold(40960);
|
|
|
+
|
|
|
+ producer = new LogProducer(producerConfig);
|
|
|
+ producer.putProjectConfig(new ProjectConfig(project,
|
|
|
+ "cn-chengdu.log.aliyuncs.com",
|
|
|
+ "LTAI5tCb5r8efPipWaKSeCkE", "BsKtHRePUFBrfF9aA8b8sDTrox23cU"));
|
|
|
+
|
|
|
+ Runtime.getRuntime().addShutdownHook(new Thread(this::close));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void debug(Object... kv) {
|
|
|
+ try {
|
|
|
+ LogItem item = log(kv);
|
|
|
+ item.PushBack("level", "debug");
|
|
|
+ producer.send(project, logStore, item);
|
|
|
+ } catch (InterruptedException | ProducerException ignored) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void info(Object... kv) {
|
|
|
+ try {
|
|
|
+ LogItem item = log(kv);
|
|
|
+ item.PushBack("level", "info");
|
|
|
+ producer.send(project, logStore, item);
|
|
|
+ } catch (InterruptedException | ProducerException ignored) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void error(Object... kv) {
|
|
|
+ try {
|
|
|
+ LogItem item = log(kv);
|
|
|
+ item.PushBack("level", "error");
|
|
|
+ producer.send(project, logStore, item);
|
|
|
+ } catch (InterruptedException | ProducerException ignored) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void warn(Object... kv) {
|
|
|
+ try {
|
|
|
+ LogItem item = log(kv);
|
|
|
+ item.PushBack("level", "warn");
|
|
|
+ producer.send(project, logStore, item);
|
|
|
+ } catch (InterruptedException | ProducerException ignored) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private LogItem log(Object... kv) {
|
|
|
+ LogItem item = new LogItem();
|
|
|
+ item.PushBack("app", app);
|
|
|
+ StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
|
|
+ if (stackTrace.length >= 4) {
|
|
|
+ StackTraceElement traceElement = stackTrace[3];
|
|
|
+ item.PushBack("at", traceElement.getClassName() + "." + traceElement.getMethodName()
|
|
|
+ + "(" + traceElement.getFileName() + ":" + traceElement.getLineNumber() + ")");
|
|
|
+ }
|
|
|
+
|
|
|
+ int length = kv.length;
|
|
|
+ if (length % 2 != 0) {
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < kv.length; i += 2) {
|
|
|
+ if (kv[i] == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ item.PushBack(kv[i].toString(), format(kv[i + 1]));
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ private String format(Object obj) {
|
|
|
+ if (obj == null) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ if (obj instanceof Throwable) {
|
|
|
+ StringWriter sw = new StringWriter();
|
|
|
+ Throwable err = (Throwable) obj;
|
|
|
+ err.printStackTrace(new PrintWriter(sw, true));
|
|
|
+ return sw.getBuffer().toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ return obj.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void close() {
|
|
|
+ try {
|
|
|
+ producer.close();
|
|
|
+ } catch (InterruptedException | ProducerException ignored) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ AliyunLogger aliyunLogger = new AliyunLogger();
|
|
|
+ aliyunLogger.init();
|
|
|
+
|
|
|
+ aliyunLogger.info("msg", "123");
|
|
|
+ aliyunLogger.info("msg", 1);
|
|
|
+ aliyunLogger.info("msg", new RuntimeException("what"));
|
|
|
+
|
|
|
+ aliyunLogger.close();
|
|
|
+ }
|
|
|
+}
|