第一篇-基础-第八章-日志的操作

日志是必需的。日志的操作必须是可统一控制、分级管理同时能保留到本地的。

8.1 SpringBoot默认的日志框架

SpringBoot支持多种日志框架,通常情况下,这些日志由一个日志抽象层和一个日志实现层搭建完成,日志抽象层是为了记录日志提供的一套标准且规范的框架,其作用是为记录日志提供接口。日志实现层是由日志抽象层实现的框架。

SpringBoot常见的日志抽象层有jcl(jakarta commons logging)、slf4j(simple logging facade for java)、jboss-logging等,常见的日志实现层有log4j、jul(java.util.logging)、log4j2、logback等,SpringBoot默认使用的日志抽象层是slf4j,默认使用的日志实现层是logback。

但是鉴于实际的使用性能和主流框架,这里实现层还是选用log4j2(它也具有Logback的所有特性)。

需要特别说明的是,在实际开发中,执行记录日志的操作不应该调用日志实现层的方法,而应该调用日志抽象层的方法。

8.2 打印日志

  • 鉴于使用了log4j2,需要引入log4j2的依赖,同时需要排除SpringBoot原始的默认实现层框架。
pom.xml进行更改
<!--将spring-web中的logging进行剔除,避免日志冲突-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--添加log4j2的依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
  • 在使用slf4j打印日志时,需要创建日志对象
1,在UserController控制类创建日志对象,注意,引入的包是org.slf4j
Logger logger= LoggerFactory.getLogger(UserController.class);
或者
Logger logger= LoggerFactory.getLogger(getClass());//推荐这个

2,以主要的info为例,可以填写单个参数,也可以使用占位符进行日志输出
logger.info("hello,this is logcat");
logger.info("hello,{},My name is {}","SpringBoot","Lilei");

8.3 保持日志

日志不仅仅要在控制台上显示,有时候更需要以文本形式保持,方便问题回朔。

在SpringBoot项目的application.properties中,可以配置日志的相关属性。

logging.file.path=dir         //在当前项目根目录下订单dir文件夹中生产日志文件,也可以本地目录 D:\\dir
logging.file.name=xxx.log    //指定日志文件名
logging.logback.rollingpolicy.max_history=7    //最多缓存7天
logging.logback.rollingpolicy.max-file-size=12KB //单文件最大12KB

8.4 log4j2.xml配置文件

项目中使用log4j2进行日志实现,最快捷方便的方法是在resources文件夹下添加log4j2.xml文件,直接将配置信息写入到专属日志配置文件中。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="fatal">
  <Properties>
    <!--定义一个日志保存目录,mac/linux使用${sys:user.home}/logs表示用户名下面的logs目录下-->
    <Property name="baseDir" value="C:\mytest01"/>
  </Properties>

  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
      <ThresholdFilter level="info" onMatch="ACCEPT"
        onMismatch="DENY"/>
      <PatternLayout
        pattern="[%d{MM:dd HH:mm:ss.SSS}] [%level] [%logger{36}] - %msg%n"/>
    </Console>

    <!--debug级别日志文件输出-->
    <RollingFile name="debug_appender" fileName="${baseDir}/debug.log"
      filePattern="${baseDir}/debug_%i.log.%d{yyyy-MM-dd}">
      <!-- 过滤器 -->
      <Filters>
        <!-- 限制日志级别在debug及以上在info以下 -->
        <ThresholdFilter level="debug"/>
        <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
      </Filters>
      <!-- 日志格式 -->
      <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
      <!-- 策略 -->
      <Policies>
        <!-- 每隔一天转存 -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <!-- 文件大小 -->
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingFile>

    <!-- info级别日志文件输出 -->
    <RollingFile name="info_appender" fileName="${baseDir}/info.log"
      filePattern="${baseDir}/info_%i.log.%d{yyyy-MM-dd}">
      <!-- 过滤器 -->
      <Filters>
        <!-- 限制日志级别在info及以上在error以下 -->
        <ThresholdFilter level="info"/>
        <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
      </Filters>
      <!-- 日志格式 -->
      <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
      <!-- 策略 -->
      <Policies>
        <!-- 每隔一天转存 -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <!-- 文件大小 -->
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingFile>

    <!-- error级别日志文件输出 -->
    <RollingFile name="error_appender" fileName="${baseDir}/error.log"
      filePattern="${baseDir}/error_%i.log.%d{yyyy-MM-dd}">
      <!-- 过滤器 -->
      <Filters>
        <!-- 限制日志级别在error及以上 -->
        <ThresholdFilter level="error"/>
      </Filters>
      <!-- 日志格式 -->
      <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
      <Policies>
        <!-- 每隔一天转存 -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <!-- 文件大小 -->
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="debug_appender"/>
      <AppenderRef ref="info_appender"/>
      <AppenderRef ref="error_appender"/>
    </Root>

  </Loggers>
</Configuration>

打完收工。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr_Sun_01

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

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

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

打赏作者

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

抵扣说明:

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

余额充值