Logback配置文件自定义配置从Nacos动态获取+ELK

微服务日志-logback读取nacos配置(完美解决加载两次问题+彩色日志) logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 说明: 1、日志级别及文件 日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中 例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而. 阅读详情

背景:

springboot微服务应用需要使用logback+elk统一日志管理。

配合nacos使用:

springboot读取配置文件是有优先级的,如果使用默认的logback.xml或者logback-spring.xml为配置文件名则会读取不到nacos上的配置。命名为logback-spring.xml程序只会在运行后一段时间内报错,一段时间后读取到nacos上的配置文件之后会正常,但是有瑕疵。logback.xml直接运行失败。所以得使用自定义命名logback配置名称。如:logback-logstash.xml

1.在nacos上配置

logging:
  config: classpath:logback-logstash.xml

classpath的默认路径为resources目录下

2.自定义一些配置

log:
  level: info
  path: logs/
logstash:
  server-addr: 192.168.78.129:9601,192.168.78.129:9602

这里你可以注意到logstash的server-addr可以配置多台节点以","分隔

log.level是动态可变的,如果在nacos上改变level,那么运行中的应用也会改变level

3.在新建文件logback-logstash.xml并配置

<?xml version="1.0" encoding="UTF-8"?>
<!--scan自动扫描重新加载配置 scanPeriod重新加载配置的周期-->
<configuration debug="true" scan="true" scanPeriod="10 seconds">

    <contextName>logback</contextName>
    <!--定义参数,后面可以通过${app.name}使用-->
    <!--<property name="app-name" value="provider"/>-->
    
    <!--凡是springProperty的配置都将出现在生成的json中,如果原json中已有相同key则将覆盖-->
    <springProperty scope="context" name="spring.application.name" source="spring.application.name"/>
    <springProperty scope="context" name="server.port" source="server.port"/>
    <springProperty scope="context" name="logstash.server-addr" source="logstash.server-addr"/>
    <springProperty scope="context" name="log.level" source="log.level"/>
    <springProperty scope="context" name="log.path" source="log.path"/>

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${logstash.server-addr}</destination>
        <!-- encoder必须配置,有多种可选 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <!--在生成的json中会加这个字段-->
            <!--<customFields>{"appname":"${spring.application.name}"}</customFields>-->
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${log.level}</level>
            </filter>
        <connectionStrategy>
            <roundRobin>
                <!-- 轮询时间间隔-->
                <connectionTTL>5 minutes</connectionTTL>
                <!--<connectionTTL>5 seconds</connectionTTL>-->
            </roundRobin>
        </connectionStrategy>
    </appender>

    <!--ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来-->
        <!--这里定义了 DEBUG,也就是控制台不会输出比ERROR级别小的日志-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${log.level}</level>
        </filter>
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <!--定义控制台输出格式-->
        <encoder>
            <!--<pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${log.level}</level>
        </filter>
        <!--定义日志输出的路径-->
        <!--通过 java -Dscheduler.manager.server.home=/path/to XXXX 配置该属性-->
        <file>${log.path}/${spring.application.name}.log</file>
        <!--定义日志滚动的策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--定义文件滚动时的文件名的格式-->
            <fileNamePattern>
                ${log.path}/${spring.application.name}.%d{yyyy-MM-dd.HH}.log.gz
            </fileNamePattern>
            <!--60天的时间周期,日志量最大20GB-->
            <maxHistory>60</maxHistory>
            <!-- 该属性在 1.1.6版本后 才开始支持-->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!--每个日志文件最大100MB-->
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <!--定义输出格式-->
        <encoder>
            <!--            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>-->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss} %contextName %-5level %logger{50} -%msg%n</pattern>-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="stdout"/>
        <appender-ref ref="LOGSTASH"/>
        <appender-ref ref="file"/>
    </root>

    <!--对于类路径以 com.example.logback 开头的Logger,输出级别设置为warn,并且只输出到控制台-->
    <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
    <!--<logger name="com.example.logback" level="warn"/>-->

    <!--通过 LoggerFactory.getLogger("mytest") 可以获取到这个logger-->
    <!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <!--    <logger name="mytest" level="info" additivity="false">-->
    <!--        <appender-ref ref="stdout"/>-->
    <!--    </logger>-->
</configuration>

4.logstash配置:

input {
    tcp {
    ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9601端口接收logback发出的消息  
        host => "192.168.78.129"
        port => 9601
    #模式选择为server  
        mode => "server"
        tags => ["tags"]  

    ##格式json  
        codec => json_lines         
    }
} 

output {
        elasticsearch {
        #ES地址
                hosts => "192.168.78.129:9200"
        #指定索引名字,不适用默认的,用来区分各个项目
                index => "%{[spring.application.name]}-%{+YYYY.MM.dd}"
        }
        stdout { codec => rubydebug}
}

图示:

nacos上的配置:
在这里插入图片描述

bootstrap.yml配置:
在这里插入图片描述

logstash日志:
在这里插入图片描述

es索引数据:
在这里插入图片描述

kibana仪表盘demo:
在这里插入图片描述

小知识(4) 动态读取nacos远程中的logback-spring.xml日志配置 动态读取nacos远程中的logback-spring.xml日志配置 阅读详情

相关推荐

【SpringBoot、logback、nacos】

首先谈一谈我的需求:目前的情况是,当前程序是使用的logback来进行日志输出。是在resource目录下配置了logback-spring.xml文件。目前配置的日志输出级别是INFO。可是实践中当线上系统出现一些问题的时候,希望在不重启程序模块的情况下,调整日志输出级别为DEBUG,将DEBUG级别的日志输出以便于通过日志发现问题原因。

菩提本无树 明镜亦非台 本来无一物 何处惹尘埃 1624

logback日志配置和自定义日志参数

logback日志配置和自定义日志参数

weixin_44519839的博客 2531

Logback日志脱敏实战:从原理到实现,构建安全防线

日志是应用监控与调试的核心组件,记录了系统运行的关键信息。然而,日志中常包含用户手机号、身份证号等敏感数据,若直接明文输出,会带来严重的数据泄露风险。从技术原理看,日志脱敏通过在日志输出流水线中插入处理环节,对敏感信息进行掩码替换,实现数据安全与合规要求。其技术价值在于以非侵入方式保障数据安全,避免业务代码污染,提升系统可维护性。在应用场景上,无论是金融交易、用户注册还是订单处理,日志脱敏都是数据安全防线的关键一环。本文聚焦于Logback框架,详细解析如何通过自定义Layout组件,结合正则表达式与预编译

weixin_30338497的博客 379

logback实现读取spring和nacos的动态配置

例如在这里我们设置了一个spring.application.name的参数。

感谢关注点赞,笔芯啾咪! 5760

Logback日志脱敏实战:非侵入式实现敏感信息自动隐藏

日志记录是软件开发中用于追踪程序运行状态、排查问题的关键技术手段。其核心原理是通过日志框架在代码关键节点输出结构化信息,帮助开发者理解系统行为。在数据安全日益重要的今天,日志中可能包含的敏感信息如手机号、身份证号等,若未经处理直接存储,会带来严重的数据泄露风险。因此,日志脱敏技术应运而生,它通过在日志输出流程中自动识别并替换敏感字段,在保障日志可读性的同时满足安全合规要求。本文聚焦于Java生态中广泛使用的Logback框架,深入探讨如何通过自定义MessageConverter组件,以非侵入式的方式实现高

weixin_30516243的博客 326

Nacos 2.4.1与Docker的完美结合:配置中心与日志管理实战

本文详细介绍了如何将Nacos 2.4.1与Docker技术深度整合,实现高效的配置中心和日志管理体系。通过单机与集群部署实践、配置优化、日志管理及性能监控等关键步骤,帮助开发者快速搭建稳定可靠的微服务基础设施。特别针对Docker环境下的Nacos部署提供了完整解决方案,提升云原生应用的开发效率。

weixin_28331555的博客 129

Java -- ELK之从nacos获取logback.xml配置信息

logback.xml 参数配置失效问题

DGH2430284817的博客 1796

Java日志脱敏实战:基于Logback实现高性能、无侵入的敏感信息保护方案

在分布式系统和微服务架构中,日志是系统监控、问题排查的核心工具,记录了应用运行的关键信息。然而,日志中若包含用户手机号、身份证、银行卡号等敏感数据,一旦泄露将引发严重安全风险。因此,日志脱敏从可选项变为强制安全规范,其核心原理是在日志输出前,通过特定技术手段对敏感字段进行识别与替换,以平衡安全需求与运维效率。在Java技术栈中,Logback作为Spring Boot等框架默认的日志组件,其高性能和可扩展性为实施脱敏提供了良好基础。通过自定义Layout组件,可以在日志事件格式化阶段精准拦截并处理参数或消息

weixin_30905133的博客 365

Nacos日志配置全攻略:从SLF4j到Logback的实战调优技巧

本文详细解析了Nacos日志配置从SLF4j到Logback的实战调优技巧,包括高性能日志输出策略、安全合规性配置及集群环境下的日志治理。通过Logback的异步日志、智能滚动策略和敏感信息脱敏等优化手段,显著提升Nacos日志管理效率与安全性,适用于分布式系统的运维实践。

weixin_30642561的博客 476

瑞萨 RL78 开发环境实战:从 CS+ for CC 到 e² studio 高效开发

本文详细介绍了瑞萨RL78单片机开发环境的选择与配置,对比分析了CS+ for CC和e² studio的特点及适用场景。内容涵盖环境安装、工程创建、调试技巧、外设驱动开发和低功耗设计等实战经验,为开发者提供全面的RL78入门指南,帮助快速上手并高效开发。

4k5l6j7h8的博客 242

coze+飞书多维表格,批量分析小红书笔记,关键还能获取图片(附保姆级教程)

通过coze工作流,一键同步小红书账号和笔记链接到飞书多维表格,效率飞升~

qq_24403067的博客 4175

SpringBoot Logback无法获取配置中心属性

SpringBoot Logback无法获取配置中心属性 前言 最近在做项目中,需要把项目中的日志信息通过RabbitMQ将规定格式的消息发送到消息队列中,然后ELK系统通过消息队列拿日志并且保存起来,在日志的配置文件(logback-spring.xml)中我们需要加入RabbitMQ的配置信息,我们的RabbitMQ信息存在Nacos的配置中心,就出现项目启动无法获取到RabbitMQ的配置,导致出错 如何解决 问题原因 在springboot官网 https://docs.spring.io/spr

jf991804033的博客 1207

方案设计之亿级排行榜方案设计

该方案通过 “Redis Zset 为核心 + 分治策略为骨架 + 多级优化为细节”,在亿级用户场景下实现了:本质是将 “亿级大问题” 拆解为 “千万级小问题”,用分布式思想和精细化设计平衡性能、可用性与成本。

shine0312的专栏 1100

Logback配置文件解析:logback.xml与logback-spring.xml对比

日志系统是软件开发中不可或缺的基础组件,Logback作为Java生态中的主流日志框架,其高性能和灵活配置特性备受开发者青睐。在Spring Boot项目中,Logback的配置文件存在两种形式:logback.xml和logback-spring.xml。这两种文件的核心差异在于配置加载时机和Spring环境集成度。logback.xml是Logback原生配置文件,在Spring上下文初始化前加载,适合记录Spring启动过程的日志;而logback-spring.xml由Spring Boot在应用上

weixin_34280237的博客 335

ADS 2013安装教程

1.2013和2014安装过程是一样的,运行ads2013_06_shp_windows文件进行安装 2.点击“NEXT”。 3.选择I accept,然后点击“NEXT”。 4.选择“complete”,然后点击“NEXT”。 5.选择安装路径,最好默认安装路径,安装路径不要有中文,然后点击“NEXT”。 6.点击“NEXT”. 7.如下路径默认安装,然后点击“NEXT”。 8.点击“NEXT”。 ...

谢谢关注“小鱼教你模数电”,各平台同号 6009

算法 | A*算法实现最优路径规划

启发式探索是利用问题拥有的启发信息来引导搜索,达到减少探索范围、降低问题复杂度的目的。A*寻路算法是启发式探索的一个典型实践,在寻路搜索的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中采取估计值优先原则,估计值更优的节点会被优先遍历。...

不断学习,不断进步,提高自己 6635

SpringBoot整合Nacos日志统一管理

SpringBoot项目接入Nacos客户端时,默认会生成独立的nacos日志文件,与项目日志体系分离。可通过设置nacos.logging.default.config.enabled=false关闭Nacos默认日志,并在logback中配置<logger name="com.alibaba.nacos" level="INFO"/>统一管理日志。生产环境建议日志输出到stdout或配置时间+大小双策略滚动,确保日志统一收集和管理,提升可观测性。

suweijie的博客 401

【unity小技巧】新输入系统InputSystem游戏运行中改键重新绑定控制按键(最全最完美解决方案)

在游戏开发中,控制输入是至关重要的一环。Unity的新输入系统(Input System)为开发者提供了强大的工具来管理和处理用户输入,不仅支持各种平台上的多种输入设备,还能轻松处理复杂的输入操作和映射。本文将深入探讨如何使用Unity的新输入系统重新绑定控制按键,为开发者提供一套全面且完善的解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7359

【ElasticSearch】Linux搭建ELK,Springboot整合ELK分布式日志

在浏览器打开9200端口地址: (http://120.78.129.95:9200/ (opens new window)),如果出现了下面的信息,就表示已经成功启动了。在浏览器打开5601端口地址: (http://120.78.129.95:5601/ (opens new window)),如果出现了下面的信息,就表示已经成功启动了。下载canal.deployer,可以直接监听MySQL的binlog,把自己伪装成MySQL的从库,只负责接收数据,并不做处理。

weixin_44823875的博客 145

Cyclone DDS背景技术

DDSI标准与DDS 1.2和1.4标准密切相关,DDSI中的实体与DCPS中的实体之间有明确的对应关系。但是,这种对应关系不是一一对应的。 此处,仅仅对DDSI规范的概念进行描述,暂不涉及Eclipse Cyclone DDS实现的细节。DDSI规范的概念将帮助对互操作性interoperability感兴趣的技术人员了解规范的外延边界和Eclipse Cyclone DDS实现的开始。

pony12的专栏 948

AWS DevOps Agent 完全指南

AI 驱动的 SRE 队友,7×24 自主调查告警、定位根因、生成修复方案、预防未来故障。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 384

Nacos服务日志:运行状态记录与故障诊断指南

你是否曾因Nacos服务异常却无法定位根源而焦头烂额?在分布式系统中,日志(Log)是排查问题的"黑匣子",尤其对于Nacos(Dynamic Naming and Configuration Service,动态命名与配置服务)这类核心中间件,其日志系统承载着服务发现、配置管理、集群通信等关键流程的运行轨迹。本文将系统剖析Nacos日志架构,提供从日志配置到故障诊断的全流程指南,帮助开发者快速掌...

gitblog_00479的博客 799

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

logback--进阶--06--logback日志输出到kafka

将logback日志输出到kafka,kafka将日志放到elasticSearch,通过kibana查看日志。

zhou920786312的博客 607

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring Boot在线日志查看与动态级别调整:从Logback到Nacos实战

在微服务架构中,日志是排查线上故障的第一手资料,但传统静态配置的文件日志往往让排障陷入“重启复现”的低效循环。基于Logback的运行时上下文机制,开发者可以直接修改Logger的有效级别而不需重载配置文件,再结合Nacos配置中心的动态推送能力,即可实现多实例环境下日志级别的实时同步与在线查看。这类技术方案不仅降低了服务器登录和grep检索的成本,也让日志从事后追溯工具转变为支持运行时干预的排查利器。无论是应对大文件倒序读取、动态调整包级别,还是通过配置中心统一管理日志级别,都是Spring Boot服务

weixin_32075843的博客 214

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring Boot日志排查实践:用ELK统一管理分布式日志

日志分析是保障系统稳定性的基础能力,尤其在微服务架构下,分布式节点的日志散落问题会极大拖累问题定位效率。ELK Stack(Elasticsearch、Logstash、Kibana)作为业界主流的日志聚合方案,为日志数据提供了采集、清洗、存储到可视化检索的一体化解决路径。其核心价值在于将分散在不同服务器上的非结构化日志转化为集中可检索的结构化数据,帮助运维和开发人员快速定位异常。该方案广泛应用于业务链路追踪、故障排查、安全审计等需要实时日志检索的场景。本文以Spring Boot应用为对象,从日志输出端的

weixin_33981932的博客 142

Dante Cloud日志优化:提升日志输出性能与存储效率的完整指南

Dante Cloud作为国内首个支持阻塞式和响应式服务并行的微服务云原生基座,其日志系统的优化对于保障系统稳定性和问题排查效率至关重要。本文将详细介绍如何在Dante Cloud项目中优化日志输出性能与存储策略,帮助开发者构建高效、可靠的日志系统。 ## 日志系统对微服务架构的重要性 在微服务架构中,日志是排查问题、监控系统运行状态的重要依据。一个设计良好的日志系统能够: - 提供清晰的故障

gitblog_00930的博客 421
上一篇: Nginx反向代理的请求路径相关注意事项
下一篇: skywalking配置nacos集群模式
DPnice
博客等级 码龄9年 38粉丝 63原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值