4日志代码

 日志级别权限

基于此controller演示配置中心的作用. * 在这个controller中我们会基于日志对象 * 进行日志输出测试.

log对象在哪个类中创建,getLogger方法中的就传入哪个类的字节码对象 //记住:以后只要Java中使用日志对象,你就采用下面之中方式创建即可. //假如在log对象所在的类上使用了@Slf4j注解,log不再需要我们手动创建,lombok会帮我们创建

org.slf4j.Logger (Java中的日志API规范,基于这个规范有Log4J,Logback等日志库)

在已有的sca-provider项目中添加如配置依赖,例如:

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

package com.jt.providercontroller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
@Slf4j//lombok中的注解用于告诉lombok,为我们的类中创建一个org.slf4j.Logger对象
public class ProviderLogController {

//    private static final Logger log=
//            LoggerFactory.getLogger(ProviderLogController.class);
    //http://localhost:8081/provider/log/doLog01


    @GetMapping("/provider/Log/doLog01")
    public String doLog01(){
        System.out.println("==doLog01==");
        log.debug("==debug==");
        log.trace("==trace==");
        log.info("==info==");
        log.warn("==warn==");
        log.error("==error==");

        return "test log 01";
    }
    @Value("${logging.level.com.jt:error}")
    private String loglevel;

    @GetMapping("/provider/log/doLog02")
    public String doLog02(){
        System.out.println("==doLog02==");
        log.debug("log level is {}"+loglevel); //内部感知
        return "log level is"+loglevel;//外部感知
    }
}

 

 bootstrap.yml文件配置

将项目sca-provider的application.yml的名字修改为bootstrap.yml(启动优先级最高),并添加配置中心配置,代码如下:

server:
  port: 8081
spring:
  application:
    name: sca-provider


  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yml
#        namespace: 3d08a162-b280-48a8-9014-ac7bd05383eb
#        shared-configs[0]:
#              data-id: app-public.yml
#              refresh: true
##        group: DEFAULT_GROUP_51

新建Nacos配置

打开nacos配置中心,新建配置,如图所示:

在这里插入图片描述

 

其中,Data ID的值要与bootstrap.yml中定义的spring.application.name的值相同(服务名-假如有多个服务一般会创建多个配置实例,不同服务对应不同的配置实例)。配置发布以后,会在配置列表中,显示我们的配置,例如:

在这里插入图片描述

测试Nacos数据读取


配置创建好以后,启动sca-provider服务,然后打开浏览器,输入http://localhost:8081/provider/log/doLog01,检测idea控制台日志输出。然后再打开nacos控制台动态更新日志级别,再访问资源并检测后台日志输出.

在这里插入图片描述

然后,修改nacos配置中心的日志级别,再刷新浏览器,检测日志的输出,是否会发生变化.

@RefreshScope注解的应用


对于nacos配置中心而言,有系统内部对配置变化的感知,还有外部系统对配置的感知,假如我们系统在浏览器中能看到日志级别的变化,该如何实现呢?我们现在来实现一个案例.

第一步:在ProviderLogController类的上面添加一个@RefreshScope注解,例如:

@RefreshScope
@RestController
public class ProviderLogController{
  //.....
}

其中,@RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到类中属性值的更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化)。

第二步:添加ProviderLogController中添加一个获取日志级别(debug<info<warn<error)的的属性和方法,代码如下:

@Value("${logging.level.com.jt:error}")
private String logLevel;
@GetMapping("/provider/log/doLog02")
public String doLog02(){
   log.info("log level is  {}",logLevel);
   return  "log level  is "+logLevel;
}

第三步:启动sca-provider服务,然后打开浏览器并输入http://localhost:8081/provider/log/doLog02进行访问测试。

说明,假如对配置的信息访问不到,请检测项目配置文件的名字是否为bootstrap.yml,检查配置文件中spring.application.name属性的值是否与配置中心的data-id名相同,还有你读取的配置信息缩进以及空格写的格式是否正确.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值