这一章主要说 springboot 中日志的配置, 自定义属性的配置与读取, 分环境的 YAML 配置文件 (如本地环境, 测试环境, 生产环境等). 比较偏向实际开发, 较为实用, 前面一章的一些基本创建在这里就不多废话了.
1. springboot 的日志配置
在我们项目实际开发中, 日志是不可或缺的. 只有巧用日志才能快速发现线上问题并且定位线上问题并且解决! 当然日志也可用来平时的本地调试, 也可以快速定位代码的位置, 跟 debug 搭配起来更好欧.
而 springboot 里面使用的是 Logback 日至框架, 并用 INFO 级别输出到控制台 (日志四个级别优先级从高到低分别是 ERROR,WARN,INFO,DEBUG)
1) 添加日志依赖 (其实不用)
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-logging</artifactId>
- <version>2.1.6.RELEASE</version>
- <scope>compile</scope>
- </dependency>
但是! 这里我们可以在 pom.xml 里找到 spring-boot-starter-web 依赖, 点进去找到 spring-boot-starter 依赖. 对没错, 就是它, 它里面已经引入了 logger, 所以我们不用手动添加 logger. 不信? 点击去看
2) 日志的使用
a) 首先创建一个 config 包, 在包下创建一个 LogConfig 类, 供其他所有类继承并且打印日志.
- public class LogConfig {
- protected static final Logger logger = LoggerFactory.getLogger(LogConfig.class);
- }
b) 接着创建一个 controller 包, 在包下创建一个 LogController 类, 测试日志的打印情况. 这里我们分别输出四个级别的日志, 观察控制台.
- @RestController
- public class LogController extends LogConfig {
- @RequestMapping("/log")
- public String showLog() {
- logger.debug("debug:Process in LogController.showLog method");
- logger.info("info:Process in LogController.showLog method");
- logger.warn("warn:Process in LogController.showLog method");
- logger.error("error:Process in LogController.showLog method");
- return "springboot log";
- }
- }
c) 启动之后, 在地址栏输入 localhost:8080/log 回车, 查看控制台, 发现只输出了 info,warn,error 三条日志, 并没有 debug. 其实细心的朋友已经发现了原因, 因为我们发现 springboot 启动时打印的日志都是 info 级别的, 这是因为默认是 info 级别的, debug 优先级低于 info, 当然不显示了.
3) 日志的配置
我们在线上就会发现它们的日志其实都是保存下来的, 那么如何保存日志文件呢, 就要打开配置文件 YAML 做相关配置了.
a) file 可以对日志文件命名. 也可以定义创建的位置, file 也可以加相对路径, 所以不用配 path 了, 我的 log 文件这样配在了 logger-resource 项目下的 log 文件夹中命名为 springboot-demo.log. 重新启动一下程序, 就会飞发现 log 文件已经生成了.
b) level 可以指定路径配置 log 级别, 但它是指定某个包下的级别. 这里我们指定了 com.wlb 下的所有都为 debug 级别, 这样再去看控制台就会发现, 原来的 debug 级别日志也输出了.
- # 日志配置
- logging:
- path: #日志路径
- file: spring-boot-logger-resource\log\springboot-demo.log #日志名称, 这里用相对路径创建. 可以不用 path 直接用 file 创建任何地方
- level:
- # 指定路径配置 log 级别
- com:
- wlb: debug
2. springboot 的配置文件分环境
在项目中一定是分环境的, 不像我们自己写的小 demo. 一般分为本地环境, 开发环境, 测试环境, 生产环境, 这里我们举例两种只模拟本地环境, 测试环境.
1) 首先在 YAML 相同位置复制粘贴出两个, 分别叫 application-dev.YAML 和 application-test.YAML 分别模拟本地环境和测试环境. 如图:
2) 在 application-dev.YAML 中配置当前文件名为 dev, 代表本地环境
- spring:
- # 当前文件
- profiles: dev
在 application-test.YAML 中配置当前文件名为 test, 代表测试环境
- spring:
- # 当前文件
- profiles: test
最后在 application.YAML 中配置当前选定的配置文件名为 dev, 即代表当前项目使用 dev 文件中的所有配置. 当在测试环境时只需要将 dev 改成 test 即可.
- spring:
- profiles:
- # 当前选定的配置文件
- active: dev
就是这么简单就配置成功了, 那么如何验证我们配置文件分环境是否生效呢, 让我们结合下一个例子创建自定义属性一起使用.
3. springboot 的自定义属性配置
在实际项目中我们有一些类似于常量的值, 但又不想写入代码中, 这样不便于区分以及后期维护, 那么一般都会写在专门的配置文件中, 便于后期修改维护. 比如 MySQL 配置用户名密码, 静态资源路径, 以及一些业务需求的配置, 他们跟代码的关系不大, 所以一般不和开发代码放在一起. 接下来教你怎么在 springboot 中写自定义属性的配置.
1) 首先创建 entity 包, 在 entity 包下创建一个实体类 ResourceEntity 做自定义属性配置. 这个类要用 @Component 注解被 spring 管理起来, 在需要自定义的属性上加上 @Value 注解, 这里我们用 com.resource + 属性名做唯一区分. 定义了资源 url 地址, 资源端口, 最大个数, 最小个数四个属性做测试.
- @Component
- public class ResourceEntity {
- @Value("${com.resource.resourceUrl}")
- private String resourceUrl;
- @Value("${com.resource.resourcePort}")
- private String resourcePort;
- @Value("${com.resource.maxNum}")
- private Integer maxNum;
- @Value("${com.resource.minNum}")
- private Integer minNum;
- public String getResourceUrl() {
- return resourceUrl;
- }
- public void setResourceUrl(String resourceUrl) {
- this.resourceUrl = resourceUrl;
- }
- public String getResourcePort() {
- return resourcePort;
- }
- public void setResourcePort(String resourcePort) {
- this.resourcePort = resourcePort;
- }
- public Integer getMaxNum() {
- return maxNum;
- }
- public void setMaxNum(Integer maxNum) {
- this.maxNum = maxNum;
- }
- public Integer getMinNum() {
- return minNum;
- }
- public void setMinNum(Integer minNum) {
- this.minNum = minNum;
- }
- }
2) 然后在 application-dev.YAML 文件中配置具体的自定义属性值. 这是本地环境配置文件中的.
- # 自定义配置
- com:
- resource:
- resourceUrl: 192.168.0.1
- resourcePort: 8888
- maxNum: 100
- minNum: 0
3) 再在 application-test.YAML 文件中配置测试环境的属性值. 这是测试环境配置文件中的.
- # 自定义配置
- com:
- resource:
- resourceUrl: 192.168.0.2
- resourcePort: 8889
- maxNum: 50
- minNum: 1
4) 创建 ResourceController, 用于页面展示我们配置的属性值.
- @RestController
- public class ResourceController {
- @Autowired
- private ResourceEntity resourceEntity;
- @RequestMapping("/resource")
- public ResourceEntity getResource() {
- return resourceEntity;
- }
- }
5) 启动项目, 在地址栏输入 localhost:8080/resource 并回车, 这时看到页面打印的 JSON 数据, 正是我们在本地环境配置的属性值. 证实了自定义属性的使用!
6) 在 application.YAML 文件中修改 dev 为 test(将本地环境配置切换为了测试环境配置) 接着启动项目, 在地址栏输入 localhost:8080/resource 并回车, 这时看到页面打印的 JSON 数据, 是我们在测试环境配置的属性值. 证实了配置文件分环境的使用!
就是这么简单, 一个 springboot 日志及自定义属性项目完成! 最后附上 GitHub 地址, 下载源码.
GitHub 地址 https://github.com/handsomewlb/spring-boot-demo
来源: https://www.cnblogs.com/wlb509727985/p/11278091.html