log日志:打印日志到控制台、文件、日志文件分区、打印错误日志到文件

springboot默认会加载classpath:logback-spring.xml文件
如果需要自定义文件名称,在application.properties中配置logging.config 选项即可
在 src/main/resources 下创建 logback-spring.xml 文件,内容如下

要打印一个类的日志用 lombok(比传统的类打印日志配置简单、方便)
在需要打印日志的类上添加日志的注解
@Slf4j 是import lombok.extern.slf4j.Slf4j;包的,别引错包

在类中要输出的地方用

原本要输出的内容System.out.println(this.getId());用下面打印日志的方式代替

// {}就是占位符,会将this.getId放入{}中打印输出,可以添加多个,例如第二句,“就是get到的id”这句话会添加到第二个{}后面
log.info("info级别的日志:{}",this.getId());
log.info("info级别的日志:{}","我的id是:{}",this.getId(),"就是get到的id");

将日志打印到控制台

<?xml version="1.0" encoding="UTF-8"?>
<!--configuration:根节点,以下3个属性都是根节点的配置,一般用默认参数即可-->
<!--scan(扫描): 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true-->
<!--scanPeriod:多长时间扫描一次,默认60毫秒扫描一次-->
<!--debug:为true时打印出logback内部日志信息,实时查看logback运行状态,默认是false-->
<!--日志分几个级别:debug(输出调试信息,一般情况应用程序不会使用debug日志)、info(输出主要信息)、error(输出错误信息)-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--property:子节点,定义一个变量-->
<!--name:LOG_PATH日志定义在哪个文件下-->
<property name="LOG_PATH" value="./logs"></property>
    <!--appender:指定日志输出的目的地,目的地可以是控制台、文件等-->
    <!--ConsoleAppender:控制台输出-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--layout:布局,输出的日志布局是什么,负责把事件转换成字符串,格式化的日志信息输出-->
        <layout>
            <!--%d:日期,代表几月几日输出的-->
            <!--%thread:线程名,web工程都是多线程-->
            <!--%5-level:代表输出级别;级别从左显示5个字符宽度-->
            <!--%logger{35}:打出的类名最长35个字符,否则按照句点分割-->
            <!--%msg:日志消息-->
            <!--%n:换行符-->
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n
            </pattern>
        </layout>
    </appender>
    <!--root:根节点设置日志级别,设置使用哪些根节点,使用的是appender节点name的值-->
    <root level="info">
        <appender-ref ref="STDOUT"></appender-ref>
    </root>
</configuration>

输出的日志与表达式相同顺序

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n

在这里插入图片描述

将日志打印到文件

<?xml version="1.0" encoding="UTF-8"?>
 <configuration debug="false">
 <appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>${LOG_PATH}/testFile.log</file>
 <append>true</append>
 <encoder>
 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -
%msg%n</pattern>
 </encoder>
 </appender>
 <root level="info">
 <appender-ref ref="FILE" />
 </root>
 </configuration>

有以下子节点:

<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
<encoder>:对记录事件进行格式化。
<prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。

执行完毕之后,根目录的logs文件夹下就有了该testFile.log文件,文件的打印格式就是

 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -
%msg%n</pattern>

在这里插入图片描述

自动备份RollingFileAppender

滚动记录文件,先将日志记录到指定文件,
当符合某个条件时(日期、日志大小、存储天数),将日志记录到其他文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_PATH" value="./logs"></property>
<appender name="MAXDATEFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--日志文件输出的文件名-->
        <fileNamePattern>${LOG_PATH}/logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
        <!--日志文件保留天数-->
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -
            %msg%n</pattern>
    </encoder>
    <!--当文件大于10MB时,生成新的日志文件-->
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>10MB</MaxFileSize>
    </triggeringPolicy>
</appender>
<!--root:根节点设置日志级别,设置使用哪些根节点,使用的是appender节点-->
<root level="info">
    <appender-ref ref="MAXDATEFILE"></appender-ref>
</root>
</configuration>

打印错误日志

<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 <FileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<layout>
<pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
 <level>ERROR</level>
 <onMatch>ACCEPT</onMatch>
 <onMismatch>DENY</onMismatch>
</filter>
</appender>

打印错误日志要在日志输出中加上error级别的输出:

log.error("这是错误日志");

日志级别

info级别: info error
debug级别:info debug error
error级别:error
trace级别:trace info debug error

猜你喜欢

转载自blog.csdn.net/qq_41767337/article/details/89406239