文章目录
- 前言
- 一、整体思路
- 二、使用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><!-- <!– 使用kafka启用下面配置–>--><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中。这样就维护一份就可以了。但是没有成功,之后有空再试吧