Spring Boot - 日志文件配置,logback 配置(超详细)

目录

1、日志文件的作用

2、日志的使用

2.1、从程序中得到日志对象

2.2、使用日志

2.3、日志格式

3、日志级别

3.1、这样的日志级别有什么用?

3.2、日志级别分类和使用

3.3、日志级别设置

4、日志持久化的两种方式

4.1、通过 application.yml 配置日志

4.2、通过 logback-spring.xml 进行自定义配置(推荐)

5、更简单的日志输出——lombok

5.1、对比

5.2、lombok的实现原理

5.3、lombok更多的注解说明


1、日志文件的作用


  • 程序报错时可以发现并解决问题。
  • 记录用户登录日志,分析用户是否是正常登录。
  • 记录系统操作日志,方便数据恢复和定位操作人。
  • 记录程序执行时间,方便为以后优化程序提供数序支持。

2、日志的使用


2.1、从程序中得到日志对象

例如,在自定义类(假设类名为LogController)中,在程序中使需要使用日志工厂 LoggerFactory 先获取日志对象(日志在程序运行期间只加载一次,并且不可变,需要使用static和final),如下:

    //获取日志对象
    private static final Logger log = LoggerFactory.getLogger(LogController.class);

Ps:logger 对象是属于 org.slf4j 包下!

2.2、使用日志

日志打印的方式有很多种,例如使用 error 方法,如下:

    //打印日志
    private void printLog() {
        log.error("这是一个error");   
    }

执行效果如下: 

日志里面这些都表示什么意思呢?

接着往下看~

2.3、日志格式

3、日志级别


3.1、这样的日志级别有什么用?

  • 筛选出重要信息,例如在配置文件中设置级别为 warn ,那么你就只能看到warn以及比特级别更高的日志信息了(error、fatal)。
  • 控制不同环境下的日志信息,例如开发环境需要很详细的信息,而生产环境为了性能和安全性就会输入尽量少的日志。

3.2、日志级别分类和使用

日志级别从高到低,如下:

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

3.3、日志级别设置

日志输出的默认级别是 info ,如果想要手动配置,可以在配置配置文件中设置logging.level配置即可,如下:

logging:
    level:
     root: error

以上是对所有包下的日志级别有效(root也就是根目录),若想要设置指定某一包下的有效,就需要在level下加上路径(路径以java文件为起始位置),如下:

4、日志持久化的两种方式


4.1、通过 application.yml 配置日志

在生产环境下需要将日志信息保留下来,便于出现问题以后容易追溯问题,将日志保存下来这个活动叫做日志持久化。

如何进行日志持久化?我们只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名即可,如下

a)绝对路径

logging:
  pattern:
    dateformat: HH:mm:ss # 日期格式
  level: # 监控哪个包下的日志
    com:
      example:
        javanav: debug # 日志级别(低于他的就不显示了)
  file: # 持久化保存
    path: D:/logs # ⽇志保存⽬录

Ps:如果没有指定文件名,就会默认生成一个 spring.log 文件

b)相对路径:会在当前项目的根目录下生成这个日志文件(下面的配置就是在当前项目根目录下创建 logs 文件夹,最后日志就会生成在这个里面)

logging:
  pattern:
    dateformat: HH:mm:ss # 日期格式
  level: # 监控哪个包下的日志
    com:
      example:
        javanav: debug # 日志级别(低于他的就不显示了)
  file: # 持久化保存
    path: logs # ⽇志保存⽬录

Ps:在没有指定文件名两次保存或者指定相同文件名进行两次保存的情况下,第二次保存的日志信息会追加到第一次保存的文件下,而不是覆盖掉上一此保存的日志信息。值得注意的是日志文件的大小一般都有上限(文件太大,有可能导致加载过慢),当然也可以自己手动设置文件大小的上限

4.2、通过 logback-spring.xml 进行自定义配置(推荐)

如果需要进行更复杂的自定义配置,就需要使用到 logback 了.

Spring Boot 官方推荐优先使用带有- spring 的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml ,命名为 logback-spring.xml 的日志配置文件,spring boot 可以为它添加一些 spring boot 特有的配置项(下面会提到)。 
默认的命名规则,并且放在 src/main/resources 下面即可

如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,application.yml可以通过logging.config属性指定自定义的名字:

logging.config=classpath:logging-config.xml

a)使用到的依赖就是 springboot starter 和 lombok 依赖.

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

b)配置信息如下:

<configuration>

    <!-- 用来定义变量,name 就是属性,value 就是值,可以在需要的地方引入 name,实现复用 -->
    <!-- Ps: 这里实际上就是在配置日志文文件输出的位置 -->
    <property name="LOG_HOME" value="logs"/>


    <!-- 引入spirng boot默认的logback配置文件(主要用他来输出彩色的控制台) -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!--
        appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,
        常用就是控制台输出策略和文件输出策略。
     -->
    <!-- Console 输出设置 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
            <charset>utf8</charset>
            <!--默认格式输出: 使用彩色面板-->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名和位置: 可以使用相对路径或者绝对路径,如果是相对路径,会直接在当前项目根目录下生成-->
            <fileNamePattern>${LOG_HOME}/readJson.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!--只保留最近90天的日志-->
            <maxHistory>90</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<!--            <totalSizeCap>1GB</totalSizeCap>-->
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--
         root 标签是必须存在的,并且必须放在最后配置. 用来指定最基础的日志输出级别,只有一个level属性(级别最低是 info,否则报错)
         可以包含零个或多个元素,appender-ref 就是在声明需要使用到哪些自定义配置,最后添加到这个logger。
     -->
    <root level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="CONSOLE"/>
    </root>

</configuration>

5、更简单的日志输出——lombok


5.1、对比

如果不使用lombok,我们创建和使用日志对象需要如下步骤:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody //返回的使页面不是文本
public class LogController {

    //获取日志对象
    private static final Logger log = LoggerFactory.getLogger(LogController.class);

    //打印日志
    @RequestMapping("/hi")
    private void printLog() {
        log.error("这是一个error");
    }

}

如果使用lombok,我们创建和使用日志对象需要如下步骤:

a)首先需要添加如下依赖:

<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.20</version>
     <optional>true</optional>
</dependency>

b)使用lombok:

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
@Slf4j
public class LogEasyController {

    @RequestMapping("/hi/easy")
    private void printLog() {
        log.error("这是一个error");
    }

}

对比图:

5.2、lombok的实现原理

我们的Java程序在IDEA中执行完后,都会编译生成一个target文件,这个文件就是项目最终执行的代码(去掉注释等一系列工作后的文件),那么想要知道lombok的实现原理,就需要去观察这个文件~

也就是说lombok的实现原理就是在编译阶段加上了我们原本需要的代码~

Java程序运行原理:

使用Lombok后的Java运行原理:

5.3、lombok更多的注解说明

注解作用
@Getter⾃动添加 getter ⽅法
@Setter动添加 setter ⽅法
@ToString⾃动添加 toString ⽅法
@EqualsAndHashCode⾃动添加 equals 和 hashCode ⽅法
@Slf4添加⼀个名为 log 的⽇志,使⽤ slf4j
@NoArgsConstructor⾃动添加⽆参构造⽅法
@AllArgsConstructor⾃动添加全属性构造⽅法,顺序按照属性的定义顺序
@NonNull属性不能为 null
@RequiredArgsConstructor⾃动添加必需属性的构造⽅法,final + @NonNull 的 属性为必需
@Data@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: logback-spring.xml是一个Spring Boot应用程序使用的配置文件,用于配置日志记录器logback的行为。以下是一个可能的logback-spring.xml配置文件示例,其中包含常见的配置选项: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="CONSOLE"/> </root> </springProfile> <springProfile name="prod"> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/myapp.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>logs/myapp.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="FILE"/> </root> </springProfile> </configuration> ``` 这个配置文件使用了Spring Profiles,根据不同的环境加载不同的配置。在“dev”环境中,日志记录器使用控制台输出,记录debug级别及以上的日志信息。在“prod”环境中,日志记录器将日志写入文件,并记录info级别及以上的日志信息。配置文件还设置了日志信息的格式、日志文件的大小、数量和保存时间等选项,以满足不同的需求。 ### 回答2: logback-spring.xml 是Spring Boot项目中用于配置Logback日志框架的配置文件。通过该文件,可以对日志输出的格式、路径、级别等进行详细配置。 首先,需要在项目的 src/main/resources 目录下创建一个名为 logback-spring.xml 的文件配置文件主要包含以下几个关键部分: 1. 配置根节点和属性:在配置文件中,首先需要配置一个根节点 configuration,并为其添加属性。 - 属性 scan:设置是否自动重新加载配置文件,默认为 true,即在文件修改后自动重新加载。 - 属性 debug:设置是否在启动时打印调试信息,默认为 false。 2. 配置日志输出路径和文件名规则:可以通过定义一个 appender,配置输出路径和文件名规则。 - 可以使用 RollingFileAppender 定义日志输出到文件中,并可以配置每个文件大小、备份文件个数等。 - 也可以配置 ConsoleAppender 将日志输出到控制台。 3. 配置日志输出格式: - 通过定义一个 encoder,可以设置输出日志的格式,包括日期格式、日志级别、输出的类名等。 - 可以使用 PatternLayoutEncoder 来设置输出格式的规则。 4. 配置日志级别: - 可以为每个包或类单独设置日志级别,来控制输出的详细程度。 - 使用 logger 元素来配置包或类的日志级别。 5. 配置日志文件的大小和备份个数: - 在 appender 中定义的 RollingFileAppender 中,可以设置每个日志文件的大小和备份文件的个数。 6. 配置日志异步输出: - 可以通过 AsyncAppender 来配置异步输出日志,提高性能。 以上是 logback-spring.xml 的详细配置。通过对这些配置项的灵活调整,可以实现精确的日志输出、格式化和管理。 ### 回答3: logback-spring.xml是一个用于Spring项目的日志配置文件,它使用logback作为日志框架,提供了灵活且可定制的日志记录功能。 在logback-spring.xml配置文件中,可以定义以下几个关键的配置元素: 1. appender(输出器):指定日志的输出方式。可以配置多个输出器,如ConsoleAppender(将日志输出到控制台)、FileAppender(将日志输出到文件)等。 2. encoder(编码器):指定日志输出的格式,如PatternLayoutEncoder(输出具体的日志格式)、JsonEncoder(将日志以JSON格式输出)等。 3. logger(日志记录器):定义日志记录的规则和级别。可以设置多个日志记录器,用于不同的类或包。通过指定package或class属性,可以配置相应的日志级别和输出器。 4. root(根记录器):指定所有日志的根记录器,并设定其级别和输出器。 当进行详细配置时,可以通过配置属性来进一步定制日志记录的行为,如设置日志级别、输出格式和文件路径等。 此外,logback-spring.xml还支持使用System environment(系统环境)和Spring的Property placeholder(属性占位符)来配置文件路径和其他属性值。 总的来说,logback-spring.xml提供了一种灵活且可扩展的方式来配置日志记录器,在Spring项目中可以根据具体需求进行详细配置,满足不同的日志需求和输出要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈亦康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值