Springboot整合Logstash笔记整理

  1. 编写核心配置类
    @Configuration(proxyBeanMethods = false)
    @EnableConfigurationProperties({LogstashProperties.class})
    public class LogstashConfig implements InitializingBean, EnvironmentAware {private final Logger log = LoggerFactory.getLogger(LogstashConfig.class);private Environment env ;@Autowiredprivate LogstashProperties logstashProperties ;@Overridepublic void afterPropertiesSet() throws Exception {String appEnv = Optional.ofNullable(env.getProperty("spring.profiles.active")).orElse("dev") ;String appName = Optional.ofNullable(env.getProperty("spring.application.name")).orElse("unknown") ;String appPort = Optional.ofNullable(env.getProperty("server.port")).orElse("8080") ;this.init(appEnv, appName, appPort);}private void init(String appEnv, String appName, String appPort) throws JsonProcessingException {if (!logstashProperties.isEnabled() || StringUtils.isBlank(logstashProperties.getHost())) {log.info("[LogstashConfig] Stash log disabled.");return;}LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory() ;Map<String, String> map = new HashMap<>();map.put("app_env", appEnv) ;map.put("app_name", appName) ;map.put("app_port", appPort) ;String customFields = new ObjectMapper().writeValueAsString(map);LogstashEncoder logstashEncoder = new LogstashEncoder();logstashEncoder.setCustomFields(customFields);ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter();throwableConverter.setRootCauseFirst(true);logstashEncoder.setThrowableConverter(throwableConverter);logstashEncoder.setContext(loggerContext);logstashEncoder.setIncludeCallerData(true);LogstashTcpSocketAppender logstashTcpSocketAppender = getLogstashTcpSocketAppender(loggerContext, logstashEncoder);AsyncAppender asyncLogstashAppender = new AsyncAppender();asyncLogstashAppender.setContext(loggerContext);asyncLogstashAppender.setName("ASYNC_LOGSTASH");asyncLogstashAppender.setQueueSize(logstashProperties.getQueueSize());asyncLogstashAppender.addAppender(logstashTcpSocketAppender);asyncLogstashAppender.setIncludeCallerData(true);asyncLogstashAppender.start();loggerContext.getLogger("ROOT").addAppender(asyncLogstashAppender);log.info("[LogstashConfig] Stash log init done.");}private LogstashTcpSocketAppender getLogstashTcpSocketAppender(LoggerContext loggerContext, LogstashEncoder logstashEncoder) {LogstashTcpSocketAppender logstashTcpSocketAppender = new LogstashTcpSocketAppender();logstashTcpSocketAppender.setName("LOGSTASH");logstashTcpSocketAppender.setContext(loggerContext);logstashTcpSocketAppender.addDestination(logstashProperties.getHost() + ":" + logstashProperties.getPort());logstashTcpSocketAppender.setEncoder(logstashEncoder);logstashTcpSocketAppender.setIncludeCallerData(true);logstashTcpSocketAppender.start();return logstashTcpSocketAppender;}@Overridepublic void setEnvironment(Environment environment) {this.env = environment ;}
    }
    
  2. 编写Properties类
    @Data
    @ConfigurationProperties(prefix = "sss.logstash")
    public class LogstashProperties {private boolean enabled ;private String host ;private String port ;private int queueSize ;
    }
    
  3. 配置文件
    sss:logstash:enabled: truehost: 127.0.0.1port: 8888queueSize: 512
    

其他问题

  1. logstash与logback的版本兼容问题
    a. logstash-logback-encoder>=7.4需要logback>=1.3
    b. 将logstash-logback-encoder降级到7.3(支持logback 1.2),并继续使用logback 1.2
    
  2. logstash 配置 (logstash.conf)
    input {tcp {mode => "server"host => "0.0.0.0"port => 8888codec => json_lines}
    }
    output {elasticsearch {hosts => ["http://localhost:9200"]index => "log-%{[app_env]}-%{+YYYY.MM.dd}"}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS6.0安装telnet-server启用telnet服务

CentOS6.0安装telnet-server启用telnet服务 一步到位 fp"/etc/yum.repos.d" ; cp -a ${fp} ${fp}.$(date %0y%0m%0d%0H%0M%0S).bkup echo [base] nameCentOS-$releasever - Base baseurlhttp://mirrors.163.com/centos-vault/6.0/os/$basearch/http://mirrors.a…

json文本怎么转DTO

将JSON文本转换为DTO&#xff08;Data Transfer Object&#xff09;通常涉及以下几个步骤&#xff1a; 定义DTO类&#xff1a;首先&#xff0c;根据JSON结构定义相应的Java类&#xff0c;这些类应包含与JSON字段对应的属性和相应的getter和setter方法。 使用JSON处理库&#x…

永劫无间游戏辅助攻略:2024阵容搭配攻略大全!云手机辅助!

《永劫无间》是一款备受玩家喜爱的动作类游戏&#xff0c;其丰富的角色选择和多样的技能搭配让玩家在战斗中体验到了极大的乐趣。然而&#xff0c;要在竞争激烈的战场上脱颖而出&#xff0c;仅仅依靠基础的游戏理解是远远不够的。为了帮助广大玩家提升战斗力&#xff0c;本文将…

Ruby、Python、Java 开发者必备:Codigger之软件项目体检

在编程的广阔天地里&#xff0c;Ruby、Python 和 Java 开发者们各自凭借着独特的语言特性&#xff0c;构建着精彩纷呈的应用世界。然而&#xff0c;无论使用哪种语言&#xff0c;确保项目的高质量始终是至关重要的目标。而 Codigger 项目体检则成为了实现这一目标的得力助手&am…

python机器学习8--网络

1.超文本传输协议HTTP GET 在实际开发应用程序时&#xff0c;一定都会利用WiFi网络进行连接&#xff0c;再通过HTTP的方式读入后台的数据&#xff0c;并下载和显示在用户的PC上。这靠的是网络服务的技术&#xff0c;也就是大家提到的Web Service。而与HTTP服务器交换数据有两种…

【React】详解“最新”和“最热”切换与排序

文章目录 一、基本概念和初始化二、切换与排序功能的实现1. 函数定义和参数2. 设置活动 Tab3. 定义新列表变量4. 根据排序类型处理列表4.1 按时间降序排序4.2 按点赞数降序排序 5. 更新评论列表 三、渲染导航 Tab 和评论列表1. map 方法2. key 属性3. className 动态赋值4. onC…

GitHub每日最火火火项目(7.26)

1. 项目名称&#xff1a;meta - llama / llama3 项目介绍&#xff1a;这是 Meta Llama 3 的官方 GitHub 站点。目前尚不清楚该项目的具体功能和特点&#xff0c;但从名称推测&#xff0c;它可能与 Llama 3 模型相关&#xff0c;或许涉及到该模型的开发、训练或应用等方面。 项…

数据结构(二叉树)

树 树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀个特殊的结点&#xff0c;…

linux 桌面版安装原生微信的方式列举

linux 桌面版安装原生微信的方式列举 方法1&#xff1a;下载deb安装包安装 下载地址&#xff1a;https://github.com/lovechoudoufu/wechat_for_linux/releases 安装示例&#xff1a; sudo dpkg -i linuxqq_3.2.10-25765_amd64.deb方法2&#xff1a;Flatpak安装 安装flatp…

docker dotnet-dump离线部署

1.下载指定dotnet版本的dotnet-dump 示例地址&#xff1a; https://www.nuget.org/packages/dotnet-dump/3.1.141901#dependencies-body-tab 我本地测试的是netcore 3.1 2. 在本地解压 将文件解压出来。看到any目录,能看到我们要用的dotnet-dump文件 3. 将tools/netcoreapp2.…

qt实现智能家居(语言控制+服务器监听)

目录 介绍页面展示环境搭建开发工具开发环境百度token 连接服务器 介绍 qt智能家居&#xff08;语音控制&#xff09; 视频演示地址&#xff1a;进入哔哩哔哩 仓库地址&#xff1a;Gitee 源代码&#xff1a;百度网盘 默认密码是123456 页面展示 登录页面演示图 控制中心页…

SpringBoot运行流程源码分析

run方法核心流程 我们在启动SpringBoot的时候调用的是SpringApplication类的静态run方法。其核心流程如下图所示&#xff1a; 在run方法内完成了SpringApplication的声明周期。&#xff0c;这个过程涉及的几个核心类如下&#xff1a; SpringApplicationRunListeners&#xff…

一起学Java(1)-新建一个Gradle管理的Java项目

一时兴起&#xff0c;也为了便于跟大家同步学习进展和分享样例代码&#xff0c;遂决定创建一个全新的Java项目&#xff0c;并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点&#xff08;如Gradle等&#xff09;。为了紧跟技术潮流和提高操作效率&a…

dp有时候就是找规律 343. 整数拆分 python 力扣

343. 整数拆分 已解答 中等 相关标签 相关企业 提示 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1,…

TCP服务器主动断开客户端

自定义消息函数 afx_msg LRESULT CbaseMFCprojectDlg::OnOnsocketbartender(WPARAM wParam, LPARAM lParam) WPARAM wParam:消息来源 res recv(wParam, cs, 65535, 0);获取这个客户端端口socket通道里面的信息长度为65535存放在cs里面 如果获取得到res0即是说明该客户端已经断…

鱼哥好书分享活动第28期:看完这篇《终端安全运营》终端安全企业基石,为你的终端安全保驾护航!

鱼哥好书分享活动第28期&#xff1a;看完这篇《终端安全运营》终端安全企业基石&#xff0c;为你的终端安全保驾护航&#xff01; 读者对象&#xff1a;主要内容&#xff1a;本书目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 在当前网络威胁日益复杂化的背景下&#xff…

linux nginx 命令记录,和转发

nginx: 查看配置文件&#xff1a;sudo find / -name nginx.conf 配置文件&#xff1a;/etc/nginx/nginx.conf 检查nginx.conf文件正确性 nginx -t -c /path/to/nginx.conf 或者 有nginx命令执行 nginx -t 查找nginx 可执行文件&#xff1a;which nginx /usr/sbin/nginx 安装Ng…

Android 支持的媒体格式,(一)音频支持格式

音频支持格式&#xff1a; 格式编码器解码器具体说明文件类型 容器格式AAC LC是是支持单声道/立体声/5.0/5.1 内容&#xff0c;标准采样率为 8-48 kHz。• 3GPP (.3gp) • MPEG-4&#xff08;.mp4、.m4a&#xff09; • ADTS 原始 AAC&#xff08;.aac&#xff0c;在 Android …

游戏UI设计大师课:3款游戏 UI 设计模板

很多时候&#xff0c;做设计需要找素材。假如是普通的 UI 界面或者 Banner 等等&#xff0c;在Dribbble、Pinterest、即时设计、Behance 翻看这样的网站&#xff0c;至少可以梳理出一些想法和思路。如果你需要一个更规范的指南&#xff0c;此时&#xff0c;在各种设计规范、官方…

.Net 检验信息采集及管理系统LIS,成熟的医院实验室管理系统源码

检验管理系统LIS实现了检验信息电子化、检验信息管理自动化&#xff0c;具备与医嘱双向沟通、采用条码管理手段、财务自动计费、仪器双向控制等重要功能特点。其工作流程为通过门诊医生和住院工作站提出检验申请&#xff0c;生成相应患者的化验条码标签&#xff0c;在生成化验单…