1 logback 配置未读取到 spring context 中的配置

logback-spring.xml 配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
  3. <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
  4. <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
  5. <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
  6. <configuration scan="true" scanPeriod="10 seconds">
  7. <!-- 获取配置中的参数 -->
  8. <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="defaultAppName"/>
  9. <springProperty scope="context" name="graylogUrl" source="graylog.url" defaultValue="127.0.0.1"/>
  10. <springProperty scope="context" name="graylogPort" source="graylog.port" defaultValue="12201"/>
  11. ...
  12. </configuration>

没有读取到 graylog 相关的配置,日志没有收集到 graylog。

解决办法:加入配置:
#将Apollo配置加载提到初始化日志系统之前
apollo.bootstrap.eagerLoad.enabled=true

2 apollo 客户端 接口无法获取没有发布的 namespace 下的 item 值,apollo api 可以

apollo api

  1. package com.hbte.sharp.demo.apollo;
  2. import com.ctrip.framework.apollo.openapi.client.ApolloOpenApiClient;
  3. import com.ctrip.framework.apollo.openapi.dto.OpenItemDTO;
  4. import com.ctrip.framework.apollo.openapi.dto.OpenNamespaceDTO;
  5. import org.junit.jupiter.api.Test;
  6. /**
  7. * 测试apollo
  8. *
  9. * @author Bruce
  10. * @date 2021/6/23 17:46
  11. */
  12. public class TestApollo {
  13. private final String token = "abaf1c08cbff987be3db18cfdf0ba303a1a8d0ed";
  14. private final String appId = "test-saas";
  15. private final String portalUrl = "http://192.168.0.213:31502/";
  16. private final String cluster = "company_01";
  17. private final String env = "dev";
  18. private ApolloOpenApiClient getClient() {
  19. return ApolloOpenApiClient.newBuilder().withPortalUrl(portalUrl).withToken(token).build();
  20. }
  21. // 可以获取没有发布的 namespace
  22. @Test
  23. public void testNonPublishNamespace() {
  24. OpenNamespaceDTO demo = getClient().getNamespace(appId, env, cluster, "demo");
  25. System.out.println(demo);
  26. }
  27. // 可以获取没有发布的 item
  28. @Test
  29. public void testNonPublishItem() {
  30. OpenItemDTO item = getClient().getItem(appId, env, cluster, "demo", "name");
  31. System.out.println(item);
  32. }
  33. // 不能获取不存在的 namespace, 404 错误
  34. @Test
  35. public void testNonExistsNamespace() {
  36. OpenNamespaceDTO demo = getClient().getNamespace(appId, env, cluster, "demo11");
  37. System.out.println(demo);
  38. }
  39. // 不能获取不存在的 item, 直接是 null,不报错
  40. @Test
  41. public void testNonExistsItem() {
  42. OpenItemDTO item = getClient().getItem(appId, env, cluster, "demo", "server.port");
  43. System.out.println(item);
  44. }
  45. }

apollo client:

  1. 注意: 属于 'company_01' 集群的实例只会使用 'company_01' 集群(当前页面)的配置,只有当对应namespace在当前集群没有发布过配置时,才会使用default集群的配置。

image.png