如何使用 SpringBoot 日志?

1. 日志的作用

1.1 什么是日志?

  Spring Boot的日志是指在Spring Boot应用程序中记录事件和信息的机制。就是用来查 BUG 的,可以帮助我们快速定位和解决应用程序中的问题。

它的作用:

  • 帮助开发人员进行调试:当应用程序出现问题时,开发人员可以根据日志信息来追踪和定位问题。
  • 了解应用程序的运行情况:日志可以记录应用程序的各种事件和信息,例如应用程序启动和关闭、HTTP请求和响应、数据库操作等。
  • 维护应用程序的稳定性:通过设置适当的日志级别,可以避免过多的日志信息影响应用程序的性能。
  • 遵循安全和合规要求:根据应用程序的安全和合规要求,需要记录一些特定的日志信息,例如用户登录信息、敏感操作记录等。

2. 自定义日志打印

  创建一个 SpringBoot项目后,我们点击运行,在控制台会弹出如下内容:

  这些其实就是系统自带的日志。那么我们如何自定义日志呢?

2.1 获取日志对象

  


import org.slf4j.Logger; //必须导这个包
import org.slf4j.LoggerFactory;

@RestController
public class TestController {

    //1.得到日志对象(当前类的日志),
    private static final Logger log = LoggerFactory.getLogger(TestController.class);
    
    ......
    
    ......
}
复制代码

  有几个注意点,第一个是日志对象Logger的包是 slf4jSpring Boot 中内置了日志框架 Slf4j,可以让开发人员使用一致的API来调用不同的日志记录框架;第二个,一般每个类都有自己的日志文件,getLogger方法参数推荐为当前这个类,并且这个日志文件不能轻易修改,所以是private static final

2.2 使对象打印日志

  Logger 提供了很多的方法用来打印日志。

@ResponseBody //返回非静态页面
@Controller

public class TestController {

    //1.得到日志对象(当前类的日志)
    private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @RequestMapping("/hi")
    public String Hi(){
        //打印日志的方法
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");

        return "Hello World!";
    }
}
复制代码

  我们先运行程序:

  当我们访问这个方法的时候(浏览器输入路径)

  会看到只有访问到这个方法后日志才会出现,这才能体现日志的作用嘛;既然都是打印日志,为什么会提供这么多的方法呢?打印出来的内容都是什么意思呢?我明明写了5个方法,为什么只打印了3个呢?后面一一来解答:

2.3 日志的格式

  日志的输出格式:

3.日志的级别

  为什么我明明写了5个方法,为什么只打印了3个呢?这就是与日志级别相关了。

3.1 日志级别的种类

  SpringBoot日志的级别用于控制输出日志的详细程度。

  每种不同的日志等级对应一组不同的日志信息,级别越高,输出的日志信息就越详细。各种日志级别的含义如下:

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认⽇志级别);
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息;
  • fatal:致命的,因为代码异常导致程序退出执⾏的事件。

  SpringBoot中日志级别从低到高依次为:trace < debug < info < warn < error < fatal,默认的级别是info

  日志的输出规则:当前的级别以及比当前级别高的日志才能输出(不会输出fatal),上面的 5 种不同的方法分别对应不同的日志级别,注意,没有fatal()方法,因为当出现fatal级别的时候程序就会被终止。

  这也就是上面写了5个方法,只打印了3个的原因。

3.2 自定义日志的级别

  我们可以设置日志的级别,在SpringBoot的配置文件application.properties中:

# 自定义日志级别
logging.level.root=error
复制代码

  现在:

  上面这是对根路径设置级别,还可以分别对不同的目录进行同时设置。

# 自定义日志级别

# 对根目录设置
logging.level.root=error
# 对controller 目录设置一个级别
longing.level.com.example.demo.controller=trace  
# 它们不会冲突,除了 com.example.demo.controller 下为 trace,其它地方都为error。
复制代码

  默认的日志是在DemoApplication启动类中打印出来的。

4. 日志的持久化

  持久化就是把日志放在硬盘上,存储为日志文件,这一步是非常重要的。

4.1 配置文件路径

  在配置文件中设置配置文件的路径:

# 设置日志文件的目录
logging.file.path=D:\\logging\\  
复制代码

  不用自己去创建这个路径,它会自动创建,开始运行并访问:

  它会默认在目录中创建一个文件,文件里面装了你自己写的日志内容。那么问题来了,我多次访问接口方法,它会覆盖掉这里面的内容吗?

  答案是不会的,它会在后面追加。

4.2 配置文件名

  可以进一步精确到文件名:

# 设置日志文件的文件名,注意这里是 name 属性
logging.file.name=D:\logging\mySpring.log
复制代码

  现在还有一个问题,如果程序运行时间周期很长(比如生产环境),那么日志一定是非常多的,用一个文件来存储显然不现实,那么如何让它自动地分成多个文件呢?

  可以设置日志文件存储大小的最大容量。

# 设置日志大小的最大大小 1KB(一般不会这么小,这里用于演示)
logging.logback.rollingpolicy.max-file-size=1KB
复制代码

  这个配置项用于指定一个日志文件的最大大小,支持的单位包括 KBMBGB 等。,当日志文件达到指定大小后,将自动创建一个新的日志文件来继续记录日志信息,我以上面的代码为例,我经过多次请求后:

5. 借助 lombok 输出日志

  lombok是一个框架,它能帮我们写get、set等方法,非常方便。

  用 lombok 输出日志其实非常简单,就是加一个注解:

@Controller
@ResponseBody
@Slf4j //加上这个注解,它会自己生成一个日志对象,对象名叫“log”,直接引用。
public class LogController {

    @RequestMapping("/hi")
    public String hi(){
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
        
        return "Hello World!";
    }
}
复制代码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在docker内开发和测试springboot应用的一些步骤: 1. 安装docker和docker-compose 2. 创建一个新的springboot应用或者将现有的应用移植到docker容器中。在应用的根目录下创建Dockerfile文件,文件中包含以下内容: ``` FROM openjdk:8-jdk-alpine VOLUME /tmp ADD target/myapp.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 其中,myapp.jar为你的应用jar包的名称,app.jar为容器内应用的名称。 3. 在docker-compose.yml文件中定义服务。例如: ``` version: '2' services: myapp: build: . ports: - "8080:8080" volumes: - ./logs:/app/logs environment: - SPRING_PROFILES_ACTIVE=dev ``` 其中,myapp为服务名称,build字段指定Dockerfile所在的路径,ports字段指定容器内的端口映射到主机的端口,volumes字段指定容器内的日志目录映射到主机的目录,environment字段指定springboot应用的环境变量。 4. 在docker-compose.yml所在的目录下执行以下命令启动服务: ``` docker-compose up ``` 5. 访问http://localhost:8080即可访问你的springboot应用。如果需要修改代码,可以在本地修改代码,然后重新构建镜像并重启服务: ``` docker-compose build docker-compose up ``` 6. 在容器内使用调试工具进行调试。可以通过以下命令进入容器内部: ``` docker exec -it <容器名称或ID> sh ``` 在容器内安装调试工具,例如jdb或者jvisualvm,进行调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值