SpringBoot 로깅 프레임 워크 사용

1. 공통 로그 프레임 워크

로그 파사드 (로그의 추상화 계층) 로그 구현
JCL (자카르타 커먼즈 로깅) SLF4j (자바 용 단순 로깅 파사드) jboss-logging Log4j JUL (java.util.logging) Log4j2 Logback

둘째, SLF4j의 사용

1. SLF4j 사용 방법

공식 문서

SLF4j는 추상이므로 SLF4j의 구현 클래스를 가져 와서 추상 레이어 메서드를 호출하여 로그를 사용하기 만하면됩니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Test{
    
    
    void testSLF4Jj(){
    
    
        Logger logger = LoggerFactory.getLogger(getClass());
        logger.error("aaaaa");
    }
}

SLF4j 아이콘 사용

여기에 사진 설명 삽입

2. SpringBoot에 남아있는 문제

프레임 워크를 사용할 때 각 프레임 워크가 의존 할 수있는 로그 패키지가 다릅니다 로그 레코드를 통합하고 SLF4j 출력
사용 하여 시스템의 모든 로그를 slf4j로 통합하고자합니다 Step
1. 시스템에서 다른 로그 프레임 워크를 제외합니다.
2. Intermediate 패키지를 사용하여 원래 로그 프레임 워크를 교체합니다.
3. slf4j의 다른 구현을 가져옵니다 .

전설:
여기에 사진 설명 삽입

세, SpringBoot 로그 사용

1. 로그 구성

SpringBoot 수정 로그 구성
log4j :

logging.level.com.atguigu=trace

#logging.path=
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log

# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log

#  在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

2 지정된 배치

각 로깅 프레임 워크의 자체 구성 파일을 클래스 경로 아래에 놓기 만하면됩니다. SpringBoot는 기본 구성을 사용하지 않습니다.

로깅 시스템 커스터마이징
로그 백 logback-spring.xml, logback-spring.groovy, logback.xml또는logback.groovy
Log4j2 log4j2-spring.xml 또는 log4j2.xml
JDK (Java Util 로깅) logging.properties

logback-spring.xml : 로깅 프레임 워크는 로그 구성 항목을 직접로드하지 않습니다 .SpringBoot는 로그 구성을 파싱하며 SpringBoot의 고급 프로파일 기능을 사용할 수 있습니다.

logback-spring.xml 구성 파일

<?xml version="1.0" encoding="UTF-8"?>
<!--
通过在文件名后添加-spring来让配置文件可以使用springboot的高级功能
如果文件名没有加-spring并且在其中使用了sppringboot的高级功能会报错如下:
no applicable action for [springProfile]
-->
<!--
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="false" scanPeriod="60 seconds" debug="false">
    <!-- 定义日志的根目录 -->
    <property name="LOG_HOME" value="/log" />
    <!-- 定义日志文件名称 -->
    <property name="appName" value="springboot_log"></property>
    <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志输出格式:
			%d表示日期时间,
			%thread表示线程名,
			%-5level:级别从左显示5个字符宽度
			%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
			%msg:日志消息,
			%n是换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} === %msg%n</pattern>
            </springProfile>
        </layout>
    </appender>

    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->  
    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 指定日志文件的名称 -->
        <file>${LOG_HOME}/${appName}.log</file>
        <!--
        当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
        TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--
            滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 
            %i:当文件大小超过maxFileSize时,按照i进行文件滚动
            -->
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <!-- 
            可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动,
            且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。注意,删除旧文件是,
            那些为了归档而创建的目录也会被删除。
            -->
            <MaxHistory>365</MaxHistory>
            <!-- 
            当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy
            -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 日志输出格式: -->     
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
        </layout>
    </appender>

    <!-- 
		logger主要用于存放日志对象,也可以定义日志类型、级别
		name:表示匹配的logger类型前缀,也就是包的前半部分
		level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR
		additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出,
		false:表示只用当前logger的appender-ref,true:
		表示当前logger的appender-ref和rootLogger的appender-ref都有效
    -->
    <!-- hibernate logger -->
    <logger name="com.atguigu" level="debug" />
    <!-- Spring framework logger -->
    <logger name="org.springframework" level="debug" additivity="false"></logger>

    <!-- 
    root与logger是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应,
    要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。 
    -->
    <root level="info">
        <appender-ref ref="stdout" />
        <appender-ref ref="appLogAppender" />
    </root>
</configuration> 

네, 스위치 로그 프레임

SLF4j + LOG4j2로 교체

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 排除原有框架的日志依赖 -->
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 新增其他的日志依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

추천

출처blog.csdn.net/magicproblem/article/details/110405867