springboot实现动态配置logstash

yml配置

logstash:
    enable: true #默认为false
    host: 127.0.0.1:4560 # logstash地址
    index: test # es中index名称

java代码


import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import lombok.extern.slf4j.Slf4j;
import net.logstash.logback.appender.LogstashTcpSocketAppender;
import net.logstash.logback.encoder.LogstashEncoder;
import org.slf4j.impl.StaticLoggerBinder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;

/**
 * @author : 
 * @description
 * @date : 2021/11/19
 */
@Configuration
@Slf4j
public class LogstashConfig   implements ApplicationRunner {

    @Value("${logstash.enable:false}")
    private Boolean enable;

    @Value("${logstash.host:null}")
    private String host;

    @Value("${logstash.index:''}")
    private String index;

    @Value("${spring.application.name:''}")
    private String applicationName;

    @Value("${spring.application.profiles.active:'default'}")
    private String activePro;

    @Override
    public void run(ApplicationArguments args) throws Exception {

        // 判断是否开启lostash
        if (!enable){
            log.info("Logstash configuration is not turned on.");
            return;
        }

        // 判断是否设置host,未设置host则退出配置
        if (null==host){
            log.warn("Failed to configure a logstash: 'host' attribute is not specified and no embedded appender could be configured.");
            return;
        }

        // 判断是否设置appName,如果没有设置appname则使用applicaionanme-active替代
        if (null!=index||"".equals(index)){
            index=applicationName+"-"+activePro;
        }

        LoggerContext loggerContext = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();
        LogstashEncoder encoder = new LogstashEncoder();
        encoder.setContext(loggerContext);
        // 配置appname为es中的index
        encoder.setCustomFields("{\"appname\":\""+index+"\"}");
        encoder.start();

        LogstashTcpSocketAppender appender = new LogstashTcpSocketAppender();
        appender.addDestination(host);
        appender.setContext(loggerContext);

        appender.setEncoder(encoder);
        appender.start();

        Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
        rootLogger.addAppender(appender);
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值