SpringBoot의 logback-spring.xml 세부 설정

"Logback 공식 웹사이트"
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입
다양한 안내 문서, 예를 들어 시간이 있을 때 직접 읽을 수 있습니다. 조정해야 하는 것은 레이아웃입니다. 레이아웃을 살펴보세요.
여기에 이미지 설명 삽입

여기에 이미지 설명 삽입
pom.xml

	<!-- 环境配置 -->
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
            </properties>
            <activation>
                <!--  设为默认开启 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

        <profile>
            <id>test</id>
            <properties>
                <spring.profiles.active>test</spring.profiles.active>
            </properties>
        </profile>

        <profile>
            <id>prod</id>
            <properties>
                <spring.profiles.active>prod</spring.profiles.active>
            </properties>
        </profile>
    </profiles>

참고 사항:

  1. SpringBoot의 기본 루트 수준은 INFO이므로 SpringBoot의 세부 정보나 실행 프로세스를 보고 싶지 않은 이상 DEBUG 수준 로그가 필요하지 않습니다.
  2. 로그 출력을 파일로 생성하도록 구성 파일을 구성할 수 있지만 환경을 구분하여 특정 환경을 사용하고 콘솔에만 출력하고 파일에는 출력하지 않더라도 해당 로그 파일은 계속 생성됩니다. (콘솔로만 출력하도록 구성되어 있어 파일이 생성되지 않습니다.)
  3. %L은 로거를 호출한 로그 문의 코드 줄 번호를 출력할 때 사용하는 변환 기호입니다. %L을 사용하면 현재 로그 문의 코드 행 번호를 동적으로 가져와서 로그 메시지의 일부로 출력합니다. 그러나 %L을 사용하면 특히 많은 수의 로그 메시지가 자주 기록되는 경우 성능에 영향을 미칠 수 있습니다. 코드 줄 번호를 얻으려면 Java의 리플렉션 메커니즘과 스택 추적의 구문 분석을 포함하는 몇 가지 추가 작업이 필요하고 이러한 작업으로 인해 추가 오버헤드가 발생하기 때문입니다. 정확한 성능 영향은 시스템의 복잡성, 로깅 빈도 및 로그 메시지의 크기에 따라 다릅니다. 성능에 민감한 프로덕션 환경에서는 불필요한 성능 손실을 줄이기 위해 구성에 %L을 사용하지 않는 것이 좋습니다. 줄 번호를 얻기 위해 %L을 사용하는 대신 로그 수준을 설정하고 스레드 이름 및 기타 디버깅 정보를 인쇄하여 로그 출력 위치를 찾는 데 도움을 줄 수 있습니다. 요약하면 %L을 사용하면 코드 행 번호를 쉽게 출력할 수 있지만 성능에 어느 정도 영향을 미칩니다. 프로덕션 환경에서는 불필요한 성능 손실을 방지하기 위해 %L을 자주 사용하지 마십시오.

간단한 구성

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量-->
    <property name="log.path" value="./log" />

    <!-- 彩色日志插件 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>

    <!-- 控制台彩色日志格式,注意:%L打印行号对性能有影响,因此不建议在生产环境使用。 -->
    <property name="CONSOLE_LOG_PATTERN" value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/>
    <!-- 输出到文件日志格式 -->
    <property name="FILE_LOG_PATTERN" value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/>

    <!--输出到控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/log_info.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
        <!--
            此日志文件只记录debug级别的
            onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
            onMatch="ACCEPT" 表示匹配该级别及以上
            onMatch="DENY" 表示不匹配该级别及以上
            onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
            onMismatch="ACCEPT" 表示匹配该级别以下
            onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
            onMismatch="DENY" 表示不匹配该级别以下的
        -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/log_warn.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/log_error.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--root配置必须在appender下边,root日志级别比appender高,如果:root是ERROR,appender是INFO,那么就是ERROR-->
    <!-- spring.profiles.active选择那个环境 -->
    <!-- 开发环境 -->
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="STDOUT" />
        </root>
    </springProfile>

    <!-- 生产环境 -->
    <springProfile name="prod">
        <root level="ERROR">
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>

    <!-- 测试环境 -->
    <springProfile name="test">
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="WARN_FILE" />
        </root>
    </springProfile>

</configuration>

다중 환경 구성

원본 리소스 아래의 logback-spring.xml 삭제, 해당 환경의 logback 폴더 및 logback xml 구성 파일 추가
여기에 이미지 설명 삽입

application.yml

spring:
  application:
    name: '@artifactId@'
  profiles:
    #环境
    active: '@spring.profiles.active@'

logging:
  config: classpath:logback/@[email protected]

개발 환경

애플리케이션-dev.yml

logging:
  level:
  	# 正式环境打印SQL日志(一般没什么问题不建议开启。)
    com.fu.easycode.mapper: debug

생산 환경

application-prod.yml

#按需配置

테스트 환경

응용 프로그램 테스트.yml

logging:
  level:
  	# 正式环境打印SQL日志(一般没什么问题不建议开启。)
    com.fu.easycode.mapper: debug

리소스/로그백/dev.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <!-- 控制台彩色日志格式,注意:%L打印行号对性能有影响,因此不建议在生产环境使用。 -->
    <property name="CONSOLE_LOG_PATTERN" value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/>

    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
            <!-- 输出到控制台的日志格式 -->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>

리소스/로그백/prod.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 应用名称 -->
    <springProperty scope="context" name="springApplicationName" source="spring.application.name" defaultValue="spring"/>
    <!-- 环境 -->
    <springProperty scope="context" name="springProfilesActive" source="spring.profiles.active" defaultValue="prod"/>
    <!-- 重启后是否删除日志 -->
    <springProperty scope="context" name="cleanHistoryOnStart" source="logging.logback.rollingpolicy.clean-history-on-start" defaultValue="false"/>
    <!-- 单个日志文件的大小 -->
    <springProperty scope="context" name="maxFileSize" source="logging.logback.rollingpolicy.max-file-size" defaultValue="10MB"/>
    <!-- 日志总文件最大值 -->
    <springProperty scope="context" name="totalSizeCap" source="logging.logback.rollingpolicy.total-size-cap" defaultValue="50GB"/>
    <!-- 日志保留时长 (天) -->
    <springProperty scope="context" name="maxHistory" source="logging.logback.rollingpolicy.max-history" defaultValue="30"/>
    <!-- 日志文件路径 -->
    <springProperty scope="context" name="path" source="logging.file.path" defaultValue="./log/${springApplicationName}/${springProfilesActive}"/>

    <contextName>${springApplicationName}</contextName>

    <property name="PATTERN_FILE" value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${path}/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <maxHistory>${maxHistory}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 重启项目后删除日志 -->
            <cleanHistoryOnStart>${cleanHistoryOnStart}</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN_FILE}</pattern>
        </encoder>
    </appender>

    <root level="ERROR">
        <appender-ref ref="FILE" />
    </root>

</configuration>


리소스/로그백/test.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 应用名称 -->
    <springProperty scope="context" name="springApplicationName" source="spring.application.name" defaultValue="spring"/>
    <!-- 环境 -->
    <springProperty scope="context" name="springProfilesActive" source="spring.profiles.active" defaultValue="prod"/>
    <!-- 重启后是否删除日志 -->
    <springProperty scope="context" name="cleanHistoryOnStart" source="logging.logback.rollingpolicy.clean-history-on-start" defaultValue="false"/>
    <!-- 单个日志文件的大小 -->
    <springProperty scope="context" name="maxFileSize" source="logging.logback.rollingpolicy.max-file-size" defaultValue="10MB"/>
    <!-- 日志总文件最大值 -->
    <springProperty scope="context" name="totalSizeCap" source="logging.logback.rollingpolicy.total-size-cap" defaultValue="50GB"/>
    <!-- 日志保留时长 (天) -->
    <springProperty scope="context" name="maxHistory" source="logging.logback.rollingpolicy.max-history" defaultValue="30"/>
    <!-- 日志文件路径 -->
    <springProperty scope="context" name="path" source="logging.file.path" defaultValue="./log/${springApplicationName}/${springProfilesActive}"/>

    <contextName>${springApplicationName}</contextName>

    <!-- 彩色日志插件 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>

    <!-- 控制台彩色日志格式,注意:%L打印行号对性能有影响,因此不建议在生产环境使用。 -->
    <property name="CONSOLE_LOG_PATTERN" value="%clr([%d{HH:mm:ss}){faint} %clr(%p) %clr(%.10t]){faint} %clr(%C{39}){cyan} %clr(%M:%L){magenta}: %m%n%wEx"/>
    <!-- 输出到文件日志格式 -->
    <property name="PATTERN_FILE" value="[%d{MM-dd HH:mm:ss} %p %.10t] %C{39}\.%M\\(\\): %m%n"/>

    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
            <!-- 输出到控制台的日志格式 -->
            <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>${path}/%d{yyyy-MM-dd}/%i.log</fileNamePattern>
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <maxHistory>${maxHistory}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${maxFileSize}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 重启项目后删除日志 -->
            <cleanHistoryOnStart>${cleanHistoryOnStart}</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>${PATTERN_FILE}</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

요약하다

두 번째 방법을 사용하는 것이 좋습니다.더 번거롭지만 환경에 따라 구분이 다릅니다. 읽기 쉬운. springProperty는 애플리케이션 설정과 함께 사용하여 애플리케이션에서 설정할 수 있기 때문에 xml의 기본 설정을 오버라이드(override)할 수 있다.

컬러 로그 형식

<property name="CONSOLE_LOG_PATTERN" value="[%yellow(%d{HH:mm:ss}) %clr(%p) %boldBlue(%.10t)] %clr(%C{39}){cyan} %boldMagenta(%M): %m%n%wEx"/>

여기에 이미지 설명 삽입

Supongo que te gusta

Origin blog.csdn.net/weixin_43933728/article/details/132070875
Recomendado
Clasificación