From a6664e14b98b4b426425743336b2d5bdef83831d Mon Sep 17 00:00:00 2001 From: guoyuanlu Date: Tue, 22 Oct 2024 16:56:07 +0800 Subject: [PATCH] update --- eden-components/eden-dependencies/pom.xml | 13 +++ .../eden-loki-spring-boot-starter/pom.xml | 57 ++++++++++ .../eden-spring-boot-starters/pom.xml | 1 + .../eden-spring-integration/pom.xml | 23 ++++ .../log4j2/Log4j2LokiAppender.java | 104 ++++++++++++++++++ .../loki/integration/log4j2/package-info.java | 1 + .../integration/logback/package-info.java | 1 + .../spring/integration/loki/package-info.java | 1 + pom.xml | 3 +- 9 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 eden-components/eden-spring-boot-starters/eden-loki-spring-boot-starter/pom.xml create mode 100644 eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/Log4j2LokiAppender.java create mode 100644 eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/package-info.java create mode 100644 eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/logback/package-info.java create mode 100644 eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/package-info.java diff --git a/eden-components/eden-dependencies/pom.xml b/eden-components/eden-dependencies/pom.xml index 990decee..07275f7c 100644 --- a/eden-components/eden-dependencies/pom.xml +++ b/eden-components/eden-dependencies/pom.xml @@ -189,6 +189,7 @@ 2.20.0 0.1.5 6.5 + 1.6.0-m1 0.16.0 @@ -622,6 +623,11 @@ eden-logstash-spring-boot-starter 0.0.1-SNAPSHOT + + io.github.shiyindaxiaojie + eden-loki-spring-boot-starter + 0.0.1-SNAPSHOT + io.github.shiyindaxiaojie eden-metrics-spring-boot-starter @@ -2023,6 +2029,13 @@ + + + com.github.loki4j + loki-logback-appender + ${loki-logback-appender.version} + + diff --git a/eden-components/eden-spring-boot-starters/eden-loki-spring-boot-starter/pom.xml b/eden-components/eden-spring-boot-starters/eden-loki-spring-boot-starter/pom.xml new file mode 100644 index 00000000..def94e8c --- /dev/null +++ b/eden-components/eden-spring-boot-starters/eden-loki-spring-boot-starter/pom.xml @@ -0,0 +1,57 @@ + + + + + + 4.0.0 + + io.github.shiyindaxiaojie + eden-spring-boot-starters + 0.0.1-SNAPSHOT + ../pom.xml + + eden-loki-spring-boot-starter + jar + eden-loki-spring-boot-starter + Spring Boot Starter For Loki + + + + + io.github.shiyindaxiaojie + eden-spring-boot + + + io.github.shiyindaxiaojie + eden-spring-integration + + + + + org.projectlombok + lombok + true + + + org.mapstruct + mapstruct-processor + true + + + diff --git a/eden-components/eden-spring-boot-starters/pom.xml b/eden-components/eden-spring-boot-starters/pom.xml index 7f9b0346..cbe6f924 100644 --- a/eden-components/eden-spring-boot-starters/pom.xml +++ b/eden-components/eden-spring-boot-starters/pom.xml @@ -61,6 +61,7 @@ eden-leaf-spring-boot-starter eden-liquibase-spring-boot-starter eden-logstash-spring-boot-starter + eden-loki-spring-boot-starter eden-metrics-spring-boot-starter eden-mongobee-spring-boot-starter eden-mongodb-spring-boot-starter diff --git a/eden-components/eden-spring-integration/pom.xml b/eden-components/eden-spring-integration/pom.xml index 9c2c9663..b5c517bb 100644 --- a/eden-components/eden-spring-integration/pom.xml +++ b/eden-components/eden-spring-integration/pom.xml @@ -40,6 +40,12 @@ io.github.shiyindaxiaojie eden-spring-framework + + + logback-classic + ch.qos.logback + + io.github.shiyindaxiaojie @@ -347,6 +353,23 @@ true + + + com.github.loki4j + loki-logback-appender + true + + + ch.qos.logback + logback-core + + + ch.qos.logback + logback-classic + + + + org.spockframework diff --git a/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/Log4j2LokiAppender.java b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/Log4j2LokiAppender.java new file mode 100644 index 00000000..55e85171 --- /dev/null +++ b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/Log4j2LokiAppender.java @@ -0,0 +1,104 @@ +package org.ylzl.eden.spring.integration.loki.integration.log4j2; + +import com.dianping.cat.Cat; +import com.dianping.cat.message.Message; +import lombok.SneakyThrows; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.*; +import org.apache.logging.log4j.core.appender.AbstractAppender; +import org.apache.logging.log4j.core.appender.AppenderLoggingException; +import org.apache.logging.log4j.core.config.Property; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginAttribute; +import org.apache.logging.log4j.core.config.plugins.PluginElement; +import org.apache.logging.log4j.core.config.plugins.PluginFactory; +import org.apache.logging.log4j.core.layout.JsonLayout; +import org.apache.logging.log4j.core.layout.PatternLayout; +import org.apache.logging.log4j.core.util.Booleans; +import org.ylzl.eden.commons.env.Charsets; +import org.ylzl.eden.spring.integration.cat.CatConstants; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; + +/** + * Log4j2 附加器 + * + * @author gyl + * @since 2.4.13 + */ +@Plugin(name = Log4j2LokiAppender.NAME, category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE, printObject = true) +public class Log4j2LokiAppender extends AbstractAppender { + + public static final String NAME = "Loki"; + + private static final int DEFAULT_MAX_LENGTH = 500; + + private final Level level; + + private final Integer maxLength; + + public Log4j2LokiAppender(String name, Filter filter, Layout layout, + boolean ignoreExceptions, Property[] properties, Level level, Integer maxLength) { + super(name, filter, layout, ignoreExceptions, properties); + this.level = level; + this.maxLength = maxLength != null && maxLength > 0 ? maxLength : DEFAULT_MAX_LENGTH; + } + + @Override + public void append(LogEvent event) { + try { + if (event.getLevel().isMoreSpecificThan(level)) { + // TODO + } + } catch (Exception ex) { + if (!ignoreExceptions()) { + throw new AppenderLoggingException(ex); + } + } + } + + @SneakyThrows(UnsupportedEncodingException.class) + private void tryAppend(final LogEvent event) { + Layout layout = getLayout(); + byte[] data; + if (layout instanceof JsonLayout) { + final byte[] header = layout.getHeader(); + final byte[] body = layout.toByteArray(event); + data = new byte[header.length + body.length]; + System.arraycopy(header, 0, data, 0, header.length); + System.arraycopy(body, 0, data, header.length, body.length); + } else { + data = layout.toByteArray(event); + } + String message = data.length > maxLength ? + new String(data, 0, maxLength, Charsets.UTF_8_NAME) : + new String(data, Charsets.UTF_8_NAME); + Cat.logEvent(CatConstants.TYPE_LOG_LOG4J2, event.getLevel().name(), Message.SUCCESS, message); + } + + @PluginFactory + public static Log4j2LokiAppender build( + @PluginAttribute("name") String name, + @PluginElement("Filter") Filter filter, + @PluginElement("Layout") Layout layout, + @PluginAttribute("ignoreExceptions") String ignore, + @PluginAttribute("level") Level level, + @PluginAttribute("maxLength") Integer maxLength) { + + if (name == null) { + return null; + } + if (layout == null) { + layout = PatternLayout.createDefaultLayout(); + } + if (level == null) { + level = Level.ERROR; + } + if (maxLength == null) { + maxLength = DEFAULT_MAX_LENGTH; + } + boolean ignoreExceptions = Booleans.parseBoolean(ignore, true); + return new Log4j2LokiAppender(name, filter, layout, ignoreExceptions, null, level, maxLength); + } +} diff --git a/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/package-info.java b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/package-info.java new file mode 100644 index 00000000..a6c59f72 --- /dev/null +++ b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/log4j2/package-info.java @@ -0,0 +1 @@ +package org.ylzl.eden.spring.integration.loki.integration.log4j2; diff --git a/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/logback/package-info.java b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/logback/package-info.java new file mode 100644 index 00000000..e338009a --- /dev/null +++ b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/integration/logback/package-info.java @@ -0,0 +1 @@ +package org.ylzl.eden.spring.integration.loki.integration.logback; diff --git a/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/package-info.java b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/package-info.java new file mode 100644 index 00000000..7d9d3407 --- /dev/null +++ b/eden-components/eden-spring-integration/src/main/java/org/ylzl/eden/spring/integration/loki/package-info.java @@ -0,0 +1 @@ +package org.ylzl.eden.spring.integration.loki; diff --git a/pom.xml b/pom.xml index 98c99431..242abcf8 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,8 @@ eden-components eden-plugins eden-tests - + eden-components/eden-spring-boot-starters/eden-loki-spring-boot-starter +