当前位置: 首页 > article >正文

ELK模块封装starter

文章目录

    • 1.combinations-elk-starter
        • 1.目录结构
        • 2.log4j2-spring.xml 从环境变量读取host和port
        • 3.ELKProperties.java 两个属性
        • 4.ELKAutoConfiguration.java 启用配置类
        • 5.ELKEnvironmentPreparedListener.java 监听器从application.yml中获取属性值
        • 6.spring.factories 注册监听器
    • 2.combinations-elk-starter-demo
        • 1.目录结构
        • 2.application.yml 配置elk属性
        • 3..env文件配置属性值

1.combinations-elk-starter

1.目录结构

CleanShot 2025-01-10 at 22.58.37@2x

2.log4j2-spring.xml 从环境变量读取host和port
    <!-- logstash 的 SocketAppender 配置 -->
    <Property name="socket.host">${sys:socket.host}</Property>
    <Property name="socket.port">${sys:socket.port}</Property>

CleanShot 2025-01-10 at 22.59.35@2x

3.ELKProperties.java 两个属性
package com.sunxiansheng.elk.config.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * Description: ELK 属性
 *
 * @Author sun
 * @Create 2025/1/10 22:32
 * @Version 1.0
 */
@ConfigurationProperties(prefix = "sun-rays.elk.logstash")
@Data
public class ELKProperties {

    /**
     * LogStash的主机
     */
    private String host;

    /**
     * LogStash的端口
     */
    private Integer port;
}
4.ELKAutoConfiguration.java 启用配置类
package com.sunxiansheng.elk.config;

import com.sunxiansheng.elk.config.properties.ELKProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

/**
 * Description: ELK自动配置类
 *
 * @Author sun
 * @Create 2024/12/31 13:14
 * @Version 1.0
 */
@Configuration
@EnableConfigurationProperties({ELKProperties.class}) // 启用配置类
@Slf4j
public class ELKAutoConfiguration {

    /**
     * 自动配置成功日志
     */
    @PostConstruct
    public void logConfigSuccess() {
        log.info("ELKAutoConfiguration has been loaded successfully!");
    }
}
5.ELKEnvironmentPreparedListener.java 监听器从application.yml中获取属性值
package com.sunxiansheng.elk.listener;

import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.context.logging.LoggingApplicationListener;
import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;

/**
 * Description: 配置文件已加载,Environment 对象已初始化
 * 使用 ApplicationEnvironmentPreparedEvent 读取 application.yml 文件中的 sun-rays.elk.logstash.host 和 sun-rays.elk.logstash.port 配置
 *
 * @Author sun
 * @Create 2025/1/10 22:46
 * @Version 1.0
 */
public class ELKEnvironmentPreparedListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {

    @Override
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
        ConfigurableEnvironment environment = event.getEnvironment();

        // 获取 socket.host 属性并提供默认值
        String socketHost = environment.getProperty("sun-rays.elk.logstash.host", "127.0.0.1");
        if ("127.0.0.1".equals(socketHost)) {
            System.err.println("WARNING: sun-rays.elk.logstash.host 属性未设置,使用默认值: " + socketHost);
        }

        // 获取 socket.port 属性并提供默认值
        String socketPort = environment.getProperty("sun-rays.elk.logstash.port", "8080");
        if ("8080".equals(socketPort)) {
            System.err.println("WARNING: sun-rays.elk.logstash.port 属性未设置,使用默认值: " + socketPort);
        }

        // 将属性设置为系统属性
        System.setProperty("socket.host", socketHost);
        System.setProperty("socket.port", socketPort);
    }

    /**
     * 当前监听器的启动顺序需要在日志配置监听器的前面,保证在日志文件初始化之前读取 application.yml 的配置。
     *
     * @return
     */
    @Override
    public int getOrder() {
        return LoggingApplicationListener.DEFAULT_ORDER - 1;
    }
}
6.spring.factories 注册监听器
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sunxiansheng.elk.config.ELKAutoConfiguration
org.springframework.context.ApplicationListener=\
com.sunxiansheng.elk.listener.ELKEnvironmentPreparedListener

2.combinations-elk-starter-demo

1.目录结构

CleanShot 2025-01-10 at 23.04.10@2x

2.application.yml 配置elk属性
sun-rays:
  log4j2:
    home: /Users/sunxiansheng/IdeaProjects/sunrays-framework/sunrays-combinations-demo/combinations-elk-starter-demo/logs # 日志根目录(默认./logs)
    module: sunrays-combinations-demo/combinations-elk-starter-demo # 模块根目录从仓库根目录开始(默认defaultModule)
  env:
    path: /Users/sunxiansheng/IdeaProjects/sunrays-framework/sunrays-combinations-demo/combinations-elk-starter-demo # .env文件的绝对路径
  elk:
    logstash:
      host: ${ELK_LOGSTASH_HOST} # LogStash的主机
      port: ${ELK_LOGSTASH_PORT} # LogStash的端口
3…env文件配置属性值
ELK_LOGSTASH_HOST=host
ELK_LOGSTASH_PORT=port

http://www.kler.cn/a/527206.html

相关文章:

  • vue3中el-input无法获得焦点的问题
  • 游戏开发领域 - 游戏引擎 UE 与 Unity
  • JVM_类的加载、链接、初始化、卸载、主动使用、被动使用
  • Vue.js路由管理与自定义指令深度剖析
  • ESP32-CAM实验集(WebServer)
  • Win11下帝国时代2无法启动解决方法
  • 数据结构初探: 顺序表
  • Mysql的主从复制及扩展功能
  • 代发考试战报:1月22号 1月23号 CCDE考试通过
  • 深入解析JUnit中的@ClassRule注解
  • 代码随想录算法训练营第十五天| 二叉树3
  • Python-操作列表
  • 38【2进制与ascall码】
  • 今日头条公域流量引流新径:开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序融合之道
  • 【C++语言】卡码网语言基础课系列----2. A+B问题II
  • 【漫话机器学习系列】072.异常处理(Handling Outliers)
  • 算法题(53):对称二叉树
  • 基于PLC的变频调速系统设计
  • 鸿蒙HarmonyOS实战-ArkUI动画(页面转场动画)_鸿蒙arkui tab 切换动画
  • K8S学习笔记
  • PDF 擦除工具
  • 【Leetcode 热题 100】62. 不同路径
  • “LoRA技术中参数初始化策略:为何A参数采用正态分布而B参数初始化为0”
  • 解锁维特比算法:探寻复杂系统的最优解密码
  • 青少年编程与数学 02-008 Pyhon语言编程基础 04课题、开始编程
  • 【图床配置】PicGO+Gitee方案