在Spring Cloud架构下使用Spring Boot的Logback日志处理方案

在Spring Cloud架构下使用Spring Boot的Logback日志处理方案,可以按照以下步骤进行:

1.引入logback依赖

在pom.xml文件中添加以下依赖:


    org.springframework.boot
    spring-boot-starter



    ch.qos.logback
    logback-classic

2.配置logback.xml文件

在src/main/resources目录下创建logback.xml文件,并添加以下配置:


<configuration>
    <property name="LOG_HOME" value="/path/to/logs"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/app.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <maxHistory>30maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>

    <logger name="com.example" level="DEBUG">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    logger>

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

其中,LOG_HOME为日志文件输出路径,可以根据需要进行修改。

3.logback.xml是Logback框架的配置文件,用于配置日志的输出格式、输出位置、日志级别等信息。

下面是logback.xml配置文件的主要内容:

3.1 配置输出位置

<property name="LOG_HOME" value="/path/to/logs"/>

3.2 配置输出格式

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

定义了日志输出的格式,包括时间、线程、日志级别、类名、日志信息等。

3.3 配置输出方式

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
    encoder>
appender>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/app.logfile>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.logfileNamePattern>
        <maxHistory>30maxHistory>
    rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
    encoder>
appender>

定义了日志输出的方式,包括控制台输出和文件输出。其中,文件输出使用了滚动策略,即以时间为基准,每天生成一个

4.在应用程序中使用日志

在应用程序中使用日志,可以使用以下方式:

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

public class MyClass {
    private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

    public void myMethod() {
        logger.debug("Debug log message");
        logger.info("Info log message");
        logger.warn("Warn log message");
        logger.error("Error log message");
    }
}

或者使用Lombok @Slf4j 注解 参考:https://blog.csdn.net/qq_20299791/article/details/89852458

5.logback.xml配置文件参考


<configuration scan="true" scanPeriod="3 seconds">
    <property resource="application.yml"/>
    <property name="LOG_PATH" value="/opt/log/"/>

    <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="ho-cc"/>
    <springProperty scope="context" name="env" source="spring.profiles.active"/>

    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-6p) --- [%yellow(%15.15t)] [%X{requestId}] %cyan(%-40.40logger{39}) : %msg%nPattern>
        encoder>
    appender>


    
    <appender name="flowlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}${appName}/flowlog/flowlog.logFile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}${appName}/flowlog/flowlog-%d{yyyyMMdd}-%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>30MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>10maxHistory>
            <totalSizeCap>2GBtotalSizeCap>
        rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-6p --- [%15.15t] [%X{requestId}] %-40.40logger{39} : %msg%nPattern>
        layout>
    appender>


    
    <appender name="accDetail" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}${appName}/accDetail/accdetail.logFile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}${appName}/accDetail/accdetail-%d{yyyyMMdd}-%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>30MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>1maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern> %msg%n Pattern>
        layout>
    appender>

    
    <appender name="logELK" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}${appName}/metriclog/callCenter.logFile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}${appName}/metriclog/callCenter-%d{yyyyMMdd}-%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>30MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>1maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%msg%nPattern>
        layout>
    appender>


    
    <logger name="com.wintelia" level="debug"/>


    <logger name="com.elk.aspect" level="info" additivity="false">
        <appender-ref ref="logELK"/>
    logger>

    <logger name="com.accDetail.aspect" level="info" additivity="false">
        <appender-ref ref="accDetail"/>
    logger>

    
    <springProfile name="dev,test">
        <logger name="com.wintelia" level="debug"/>
        <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
        <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
        <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
        <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
        <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
        <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
        <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
    springProfile>

    <springProfile name="prod,uat">
        <logger name="com.wintelia" level="info"/>
    springProfile>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="flowlog"/>
    root>

configuration>

你可能感兴趣的:(spring,boot,spring,cloud,架构)