logback动态获取nacos配置

文章目录

  • 前言
  • 一、整体思路
  • 二、使用bootstrap.yml
  • 三、增加环境变量
  • 四、pom文件
  • 五、logback-spring.xml更改
  • 总结


前言

主要是logback动态获取nacos的配置信息,结尾完整代码
项目springcloud+nacos+plumelog,使用的时候、特别是部署的时候,需要改环境,改地址
在这里插入图片描述
application.yml
在这里插入图片描述
logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds"><!--<include resource="org/springframework/boot/logging/logback/base.xml" />--><contextName>logback</contextName><!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --><property name="log.path" value="./logs"/><property name="log.name" value="main"/><!--输出到控制台--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>debug</level></filter><encoder><pattern>%green(TIMESTAMP):%-5d{yyyy-MM-dd HH:mm:ss.SSS}; %yellow(LEVEL):%level; %magenta(CLASS):%C{50};%magenta(METHOD):%M; %yellow(CT):%thread; %green(MSG):%msg%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 时间滚动输出 level为 INFO 日志 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/${log.name}.log</file><!--日志文件输出格式--><!-- class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"--><encoder><pattern>%green(TIMESTAMP):%-5d{yyyy-MM-dd HH:mm:ss.SSS}; %yellow(LEVEL):%level; %magenta(CLASS):%C{50};%magenta(METHOD):%M; %yellow(CT):%thread; %green(MSG):%msg%n</pattern><charset>UTF-8</charset></encoder><!-- 日志记录器的滚动策略,按小时 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 每天日志归档路径以及格式 --><fileNamePattern>${log.path}/all/${log.name}-%d{yyyy-MM-dd-HH}.gz</fileNamePattern><!--日志文件保留小时数--><maxHistory>2160</maxHistory></rollingPolicy><!-- 此日志文件全部记录,不加入Filter --></appender><!-- 时间滚动输出 level为 ERROR 日志 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/${log.name}-error.log</file><!--日志文件输出格式--><encoder><pattern>%green(TIMESTAMP):%-5d{yyyy-MM-dd HH:mm:ss.SSS}; %yellow(LEVEL):%level; %magenta(CLASS):%C{50};%magenta(METHOD):%M; %yellow(CT):%thread; %green(MSG):%msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按小时 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/error/${log.name}-error-%d{yyyy-MM-dd-HH}.gz</fileNamePattern><!--日志文件保留小时数--><maxHistory>2160</maxHistory></rollingPolicy><!-- 此日志文件只记录ERROR级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 异步输出 --><appender name="ASYNC_CONSOLE" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志的话,discardingThreshold必须大于0,并且应小于appender的maxQueueSize --><discardingThreshold>0</discardingThreshold><!-- 设置日志事件的最大队列长度 --><queueSize>256</queueSize><!-- 添加真正的日志appender,引用同步,将其包装为异步 --><appender-ref ref="CONSOLE"/></appender><!-- 异步输出 --><appender name="ASYNC_INFO_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志的话,discardingThreshold必须大于0,并且应小于appender的maxQueueSize --><discardingThreshold>0</discardingThreshold><!-- 设置日志事件的最大队列长度 --><queueSize>256</queueSize><!-- 添加真正的日志appender,引用同步,将其包装为异步 --><appender-ref ref="INFO_FILE"/></appender><!-- 异步输出 --><appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志的话,discardingThreshold必须大于0,并且应小于appender的maxQueueSize --><discardingThreshold>0</discardingThreshold><!-- 设置日志事件的最大队列长度 --><queueSize>256</queueSize><!-- 添加真正的日志appender,引用同步,将其包装为异步--><appender-ref ref="ERROR_FILE"/></appender><!-- 使用kafka启用下面配置--><appender name="plumelog" class="com.plumelog.logback.appender.KafkaAppender"><appName>cmp-system</appName><!--        qa--><!--                <kafkaHosts>192.168.31.12:6667,192.168.31.13:6667,192.168.31.14:6667</kafkaHosts>--><!--prod--><kafkaHosts>192.168.30.17:6667,192.168.30.18:6667,192.168.30.19:6667,192.168.30.20:6667,192.168.30.21:6667</kafkaHosts></appender><!--开发环境:打印控制台--><springProfile name="dev"><root level="info"><appender-ref ref="CONSOLE"/><!--<appender-ref ref="DEBUG_FILE" />--><appender-ref ref="INFO_FILE"/><!--<appender-ref ref="WARN_FILE" />--><appender-ref ref="ERROR_FILE"/><appender-ref ref="plumelog"/></root></springProfile><!--测试环境:输出到文件--><springProfile name="test"><root level="info"><appender-ref ref="CONSOLE"/><!--<appender-ref ref="DEBUG_FILE" />--><appender-ref ref="INFO_FILE"/><!--<appender-ref ref="WARN_FILE" />--><appender-ref ref="ERROR_FILE"/><appender-ref ref="plumelog"/></root></springProfile><!--QA环境:输出到文件--><springProfile name="qa"><root level="info"><appender-ref ref="CONSOLE"/><!--<appender-ref ref="DEBUG_FILE" />--><appender-ref ref="INFO_FILE"/><!--<appender-ref ref="WARN_FILE" />--><appender-ref ref="ERROR_FILE"/><appender-ref ref="plumelog"/></root></springProfile><!--生产环境:输出到文件--><springProfile name="prod"><root level="info"><appender-ref ref="CONSOLE"/><!--<appender-ref ref="DEBUG_FILE" />--><appender-ref ref="INFO_FILE"/><!--<appender-ref ref="WARN_FILE" />--><appender-ref ref="ERROR_FILE"/><appender-ref ref="plumelog"/></root></springProfile></configuration>

每次部署需要修改使用active的版本。和修改xml的kafka地址。已经使用了nacos的服务发现功能。决定用配置中心整理下。

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、整体思路

在nacos上将配置信息配置上。logback动态获取nacos的配置

二、使用bootstrap.yml

原来是application.yml,但是在spring中,logback.xml的加载循序在application.yml之前。导致logback.xml动态获取kafka服务器地址失败。
bootstrap.yml
在这里插入图片描述
NACOS_SERVER_ADDR、NACOS_NAMESPACE是自定义环境变量。
如果读取不到NACOS_SERVER_ADDR、NACOS_NAMESPACE值,默认值为后面的nacos地址、命名空间

三、增加环境变量

本地不用管。默认即可。qa、prod环境需要再机器上执行命令

export NACOS_SERVER_ADDR=192.168.31.11:8848
export NACOS_NAMESPACE=bd1c9d0c-be99-425f-a0bc-93838b2171a5

四、pom文件

pom中增加nacos-config依赖

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

五、logback-spring.xml更改

logback-spring.xml修改为logback-nacos.xml,名字可以自定义。
在nacos的配置文件中。做日志指向。

logging:config: classpath:logback-nacos.xml

这步最重要,不然动态获取失败。也是看别人解决的
在这里插入图片描述
在这里插入图片描述
完整的代码
在这里插入图片描述
bootstrap.yml

# Tomcat
server:port: 9003# Spring
spring:application:# 应用名称name: cmp-sim-managementcloud:nacos:discovery:# 服务注册地址server-addr: ${NACOS_SERVER_ADDR:10.10.10.20:8848}config:# 配置中心地址server-addr: ${NACOS_SERVER_ADDR:10.10.10.20:8848}# 配置文件格式file-extension: yamlnamespace: ${NACOS_NAMESPACE:bd1c9d0c-be99-425f-a0bc-93838b2171a5}refresh-enabled: true

logback-nacos-xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds"><!--<include resource="org/springframework/boot/logging/logback/base.xml" />--><!--    <contextName>logback1</contextName>--><!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --><property name="log.path" value="./logs"/><property name="log.name" value="main"/><springProperty scope="context" name="application.name" source="spring.application.name"/><springProperty scope="context" name="plumelog.kafka" source="spring.kafka.bootstrap-servers"/><!--输出到控制台--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>info</level></filter><encoder><pattern>%green(TIMESTAMP):%-5d{yyyy-MM-dd HH:mm:ss.SSS}; %yellow(LEVEL):%level; %magenta(CLASS):%C{50};%magenta(METHOD):%M; %yellow(CT):%thread; %green(MSG):%msg%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 时间滚动输出 level为 INFO 日志 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/${log.name}.log</file><!--日志文件输出格式--><!-- class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"--><encoder><pattern>%green(TIMESTAMP):%-5d{yyyy-MM-dd HH:mm:ss.SSS}; %yellow(LEVEL):%level; %magenta(CLASS):%C{50};%magenta(METHOD):%M; %yellow(CT):%thread; %green(MSG):%msg%n</pattern><charset>UTF-8</charset></encoder><!-- 日志记录器的滚动策略,按小时 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 每天日志归档路径以及格式 --><fileNamePattern>${log.path}/all/${log.name}-%d{yyyy-MM-dd-HH}.gz</fileNamePattern><!--日志文件保留小时数--><maxHistory>2160</maxHistory></rollingPolicy><!-- 此日志文件全部记录,不加入Filter --></appender><!-- 时间滚动输出 level为 ERROR 日志 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 正在记录的日志文件的路径及文件名 --><file>${log.path}/${log.name}-error.log</file><!--日志文件输出格式--><encoder><pattern>%green(TIMESTAMP):%-5d{yyyy-MM-dd HH:mm:ss.SSS}; %yellow(LEVEL):%level; %magenta(CLASS):%C{50};%magenta(METHOD):%M; %yellow(CT):%thread; %green(MSG):%msg%n</pattern><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder><!-- 日志记录器的滚动策略,按小时 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/error/${log.name}-error-%d{yyyy-MM-dd-HH}.gz</fileNamePattern><!--日志文件保留小时数--><maxHistory>2160</maxHistory></rollingPolicy><!-- 此日志文件只记录ERROR级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 异步输出 --><appender name="ASYNC_CONSOLE" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志的话,discardingThreshold必须大于0,并且应小于appender的maxQueueSize --><discardingThreshold>0</discardingThreshold><!-- 设置日志事件的最大队列长度 --><queueSize>256</queueSize><!-- 添加真正的日志appender,引用同步,将其包装为异步 --><appender-ref ref="CONSOLE"/></appender><!-- 异步输出 --><appender name="ASYNC_INFO_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志的话,discardingThreshold必须大于0,并且应小于appender的maxQueueSize --><discardingThreshold>0</discardingThreshold><!-- 设置日志事件的最大队列长度 --><queueSize>256</queueSize><!-- 添加真正的日志appender,引用同步,将其包装为异步 --><appender-ref ref="INFO_FILE"/></appender><!-- 异步输出 --><appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志的话,discardingThreshold必须大于0,并且应小于appender的maxQueueSize --><discardingThreshold>0</discardingThreshold><!-- 设置日志事件的最大队列长度 --><queueSize>256</queueSize><!-- 添加真正的日志appender,引用同步,将其包装为异步--><appender-ref ref="ERROR_FILE"/></appender><!--    &lt;!&ndash; 使用kafka启用下面配置&ndash;&gt;--><appender name="plumelog" class="com.plumelog.logback.appender.KafkaAppender"><appName>${application.name}</appName><kafkaHosts>${plumelog.kafka}</kafkaHosts></appender><root level="info"><appender-ref ref="CONSOLE"/><!--<appender-ref ref="DEBUG_FILE" />--><appender-ref ref="INFO_FILE"/><!--<appender-ref ref="WARN_FILE" />--><appender-ref ref="ERROR_FILE"/><appender-ref ref="plumelog"/></root></configuration>

从nacos中动态获取kafka信息
在这里插入图片描述
在这里插入图片描述


总结

原本想着将logback-nacos.xml也放到nacos中。这样就维护一份就可以了。但是没有成功,之后有空再试吧

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

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

相关文章

工具学习_Docker

0. Docker 简介 Docker 是一个开源平台&#xff0c;旨在帮助开发者构建、运行和交付应用程序。它通过容器化技术将应用程序及其所有依赖项打包在一个标准化的单元&#xff08;即容器&#xff09;中&#xff0c;使得应用程序在任何环境中都能保持一致的运行效果。Docker 提供了…

基础知识学习上

基础知识学习上 1.关于print1.1 format 方法 2.运算符2.1 除法运算2.2 幂运算 3.条件控制语句3.1 if语句3.2 循环语句 4.复杂数据类型4.1列表4.2字典4.3字符串 5.函数 1.关于print 分隔符 print(1, 2, 3, 4, sep-) print(1, 2, 3, 4, sep。)结尾符 print(1, 2, 3, 4, end?) pr…

无监督跨域目标检测的语义一致性知识转移

Semantic consistency knowledge transfer for unsupervised cross domain object detection 无监督跨域目标检测的语义一致性知识转移 作者: Zichong Chen, Ziying Xia, Xiaochen Li, Junhao Shi, Nyima Tashi, Jian Cheng 所属机构: 电子科技大学信息与通信工程学院&…

AI智能稿件排版系统订单管理系统

在现代制造业和服务行业中&#xff0c;高效的生产流程和精确的订单管理是企业保持竞争优势的核心要素。AI智能稿件排版系统和订单管理系统作为一体化解决方案&#xff0c;以其强大的自动化能力和智能化技术&#xff0c;帮助企业实现排版效率提升、数据格式兼容性增强和生产流程…

Android Google登录接入

官方文献&#xff1a; 1、前期准备&#xff1a; https://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cnhttps://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cn 2、具体开发&#xff1a; 新版 Googl…

论文浅尝 | MindMap:知识图谱提示激发大型语言模型中的思维图(ACL2024)

笔记整理&#xff1a;和东顺&#xff0c;天津大学硕士&#xff0c;研究方向为软件缺陷分析 论文链接&#xff1a;https://aclanthology.org/2024.acl-long.558/ 发表会议&#xff1a;ACL 2024 1. 动机 虽然大语言模型&#xff08;LLMs&#xff09;已经在自然语言理解和生成任务…

Spring Cloud Data Flow快速入门Demo

1.什么是Spring Cloud Data Flow&#xff1f; Spring Cloud Data Flow 是一个用于构建和编排数据处理流水线的云原生框架。它提供了一种简化的方式来定义、部署和管理数据处理任务和流应用程序。以下是一些关键特性和组件&#xff1a; 关键特性 流处理&#xff1a; 支持实时数…

C# .NET环境下调用ONNX格式YOLOV8模型问题总结

我的环境是&#xff1a; Visual Studio: 2019 显卡&#xff1a; 一、遇到问题 1、EntryPointNotFoundException:无法在DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点。差了下原因&#xff0c;入口点是启动项中的问题。 原因&#xff1a;之前用yolov7时安装的版本在C…

量子感知机

神经网络类似于人类大脑&#xff0c;是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题&#xff0c;是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子…

AI Large Language Model

AI 的 Large Language model LLM , 大语言模型&#xff1a; 是AI的模型&#xff0c;专门设计用来处理自然语言相关任务。它们通过深度学习和庞大的训练数据集&#xff0c;在理解和生成自然语言文本方面表现出色。常见的 LLM 包括 OpenAI 的 GPT 系列、Google 的 PaLM 和 Meta…

运维团队3D可视化智能机房管理方案

随着信息技术的飞速发展&#xff0c;机房作为信息技术基础设施的核心部分&#xff0c;其管理效率与可视化程度对运维团队的工作质量有着直接影响。本文将介绍一种结合3D可视化技术的机房管理方案&#xff0c;为运维团队提供一种新的视角和工具&#xff0c;以提升机房管理的效率…

CKA认证 | Day2 K8s内部监控与日志

第三章 Kubernetes监控与日志 1、查看集群资源状态 在 Kubernetes 集群中&#xff0c;查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释&#xff0c;帮助你更好地管理和监控 Kubernetes 集群。 1.1 查看master组件状态 Kubernetes 的 Master 组件包…

111 - Lecture 10

File I/O and GUI with JavaFX 文件输入/输出与JavaFX图形用户界面 一、Overview 1. File I/O &#xff08;1&#xff09; learning Java File I/O mechanism &#xff08;2&#xff09; writing into and reading from a file 使用文件I/O进行数据读取和…

分享一下arr的意义(c基础)(必看)(牢记)

arr 即数组名 一般指数组首元素地址 在两种情况下不是 1&#xff1a;sizeof&#xff08;arr&#xff09; arr指整个数组简单讲解一下strlen与sizeof&#xff08;c基础&#xff09;_strzeof在c语言中什么意思-CSDN博客 2&#xff1a;printf&#xff08;"%p",&…

大数据基于Spring Boot的化妆品推荐系统的设计与实现

摘 要 随着大数据时代的到来&#xff0c;人们对于个性化服务的需求越来越高。化妆品推荐系统作为一个认知智能模型段&#xff0c;在为消费者提供更好的购物体验方面发挥了重要作用。本研究基于大数据技术设计了一个高效准确的化妆品推荐系统。通过对海量数据的分析和处理&…

NUXT3学习日记四(路由中间件、导航守卫)

前言 在 Nuxt 3 中&#xff0c;中间件&#xff08;Middleware&#xff09;是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑&#xff0c;像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用&#xff0c;也可以只在特定页…

在Unity环境中读取Excel配置文件(入门)

使用Excel作为配置的优势 使用Excel作为配置文件有相对普通的文本文档/json等类型的配置文件有一个更好的优点,更易于编辑,更易读.譬如上面的例子,我可以制作一个人员名单,可以记录它们的姓名,年龄等信息,每一行就是一个对象,该表就是一个List. 环境准备 GitHub - ExcelDataR…

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一&#xff0c;Maven的概述 Maven的作用&#xff1a;专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;提…

VM虚拟机装MAC后无法联网,如何解决?

✨在vm虚拟机上&#xff0c;给虚拟机MacOS设置网络适配器。选择NAT模式用于共享主机的IP地址 ✨在MacOS设置中设置网络 以太网 使用DHCP ✨回到本地电脑上&#xff0c;打开 服务&#xff0c;找到VMware DHCP和VMware NAT&#xff0c;把这两个服务打开&#xff0c;专一般问题就…

day06(单片机高级)PCB设计

目录 PCB设计 PCB设计流程 元器件符号设计 原理图设计 元器件封装设计 元器件库使用 PCB设计 目的&#xff1a;学习从画原理图到PCB设计的整个流程 PCB设计流程 元器件符号设计 元器件符号&#xff1a;这是电子元器件的图形表示&#xff0c;用于在原理图中表示特定的元器件。例…