SpringBoot入门(二):日志及自定义属性
这一章主要说springboot中日志的配置、自定义属性的配置与读取、分环境的yml配置文件(如本地环境、测试环境、生产环境等)。比较偏向实际开发,较为实用,前面一章的一些基本创建在这里就不多废话了。
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)日志的配置
我们在线上就会发现它们的日志其实都是保存下来的,那么如何保存日志文件呢,就要打开配置文件yml做相关配置了。
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)首先在yml相同位置复制粘贴出两个,分别叫application-dev.yml 和 application-test.yml分别模拟本地环境和测试环境。如图:

2)在 application-dev.yml中配置当前文件名为dev,代表本地环境
spring:
# 当前文件
profiles: dev
在application-test.yml中配置当前文件名为test,代表测试环境
spring:
# 当前文件
profiles: test
最后在application.yml中配置当前选定的配置文件名为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.yml文件中配置具体的自定义属性值。这是本地环境配置文件中的。
# 自定义配置
com:
resource:
resourceUrl: 192.168.0.1
resourcePort: 8888
maxNum: 100
minNum: 0
3)再在application-test.yml文件中配置测试环境的属性值。这是测试环境配置文件中的。
# 自定义配置
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.yml文件中修改dev为test(将本地环境配置切换为了测试环境配置)接着启动项目,在地址栏输入localhost:8080/resource并回车,这时看到页面打印的json数据,是我们在测试环境配置的属性值。证实了配置文件分环境的使用!

就是这么简单,一个springboot 日志及自定义属性项目完成!最后附上github地址,下载源码。
SpringBoot入门(二):日志及自定义属性的更多相关文章
- springboot 入门二- 读取配置信息一
在上篇入门中简单介绍下springboot启动使用了大量的默认配置,在实际开发过程中,经常需要启动多个服务,那端口如何手动修改呢? 此篇就是简单介绍相关的配置文件信息. Spring Boot允许外部 ...
- springboot 入门五-日志一
springboot内部采用commons logging作为日志纪录,但也保留了第三方的日志框架接入的实现,例如Java Util Logging,Log4J2还有Logback.如果你要实现一种日 ...
- SpringBoot入门 (二) 属性文件读取
在上一篇中介绍了在idea中创建springboot工程及使用web工程输出“helloworld”到前端页面,本文学习在springboot工程中读取属性文件中的属性值. 一 自定义属性 在appl ...
- SpringBoot入门 (三) 日志配置
上一篇博文记录了再springboot项目中读取属性文件中配置的属性,本文学习在springboot项目中记录日志. 日志记录在项目中是很常见的一个功能了,对排查问题有很大帮助,也可以做分类分析及统计 ...
- SpringBoot入门二:与Mybatis整合
一.编程步骤 1.引入依赖 springboot相关依赖(略).mybatis-spring-boot-starter.mysql.druid.lombook <dependency> & ...
- SpringBoot入门基础
目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...
- SpringBoot入门系列(十二)统一日志收集
前面介绍了Spring Boot 异常处理,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html. 今 ...
- SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1
在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
随机推荐
- Linux 中文设置
命令 locale,查看Linux默认系统语言 [root@VM_0_15_centos /]# locale LANG=en_US.utf8 LC_CTYPE="en_US.utf8&q ...
- spring 5.x 系列第1篇 —— springmvc基础 (xml配置方式)
文章目录 一.搭建hello spring工程 1.1 项目搭建 1.2 相关配置讲解 二.配置自定义拦截器 三.全局异常处理 四.参数绑定 4.1 参数绑定 4.2 关于日期格式转换的三种方法 五. ...
- jQuery-ajax-.get,.post方法
在上一篇中详细介绍了jQuery中ajax局部方法$.load()的使用.下面来介绍两个全局方法$.get(),$.post()的使用. 1.这两个全局方法其实和上一篇中的$.load()方法使用是差 ...
- UVALive 6255:Kingdoms(状压DFS)
题目链接 题意 给出n个王国和n*n的矩阵,mp[i][j] 代表第 i 个王国欠第 j 个王国 mp[i][j] 块钱.如果当前的王国处于负债状态,那么这个王国就会被消除,和它相连的王国的债务都会被 ...
- ZOJ 3955:Saddle Point(思维)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3955 题意:给出一个n*m的矩阵,定义矩阵中的特殊点Aij当且仅当Aij是 ...
- POJ 3301:Texas Trip(计算几何+三分)
http://poj.org/problem?id=3301 题意:在二维平面上有n个点,每个点有一个坐标,问需要的正方形最小面积是多少可以覆盖所有的点. 思路:从第二个样例可以看出,将正方形旋转45 ...
- HDU 3183:A Magic Lamp(RMQ)
http://acm.hdu.edu.cn/showproblem.php?pid=3183 题意:给出一个数,可以删除掉其中m个字符,要使得最后的数字最小,输出最后的数字(忽略前导零). 思路:设数 ...
- 花5分钟时间来了解一下高性能网关Kong会有意外收获
前言 前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营真的非常需要拥抱开源,应该敞开心扉 ...
- Java面试总结(一)
1.equals和==和hashcode “==”是运算符,比较两个变量的值是否相等 equals是Object类的方法.比较两个对象是否相等 hashcode是Object类的方法,返回一个 ...
- Java学习笔记之---内部类
Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...