接入日志

Web 工程和 Core 工程的日志配置相同,因此本文将以 Core 工程为例,假设工程依赖信息如下:

  • groupId: com.alipay.sofa

  • artifactId: APPNAME

则根据上述信息,默认生成的日志配置文件为 service 模块下的 src/main/resources/logback-spring.xml ,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!--注意:若需要用 spring 扩展 profile 支持,则文件名应为 logback-spring.xml,而不是 logback.xml。-->
    <springProperty scope="context" name="logging.path" source="logging.path"/>
    <springProperty scope="context" name="logging.level" source="logging.level.com.alipay.sofa"/>


    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{HH:mm:ss.SSS}%-5level%logger{80}-%msg%n</Pattern>
        </encoder>
    </appender>

    <!--以“天”为单位生成各日志文件-->
    <appender name="ERROR-APPENDER"class="ch.qos.logback.core.rolling.RollingFileAppender">

        <append>true</append>

        <!--过滤器,只记录 error 级别的日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!--日志名称-->
        <file>${logging.path}/APPNAME/common-error.log</file>

        <!--每天生成一个日志文件,保存30天的日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名:按天回滚-->
            <FileNamePattern>${logging.path}/APPNAME/common-error.log.%d{yyyy-MM-dd}</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n 是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n</pattern>
            <!--编码-->
            <charset>UTF-8</charset>
        </encoder>

    </appender>

    <appender name="ROOT-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>${logging.level}</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <file>${logging.path}/APPNAME/common-default.log</file>

        <!--每天生成一个日志文件,保存30天的日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名:按天回滚 daily -->
            <FileNamePattern>${logging.path}/APPNAME/common-default.log.%d{yyyy-MM-dd}
            </FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n 是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n</pattern>
            <!--编码-->
            <charset>UTF-8</charset>
        </encoder>

    </appender>

    <logger name="com.alipay.sofa" level="${logging.level}" additivity="false">
        <appender-ref ref="ROOT-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </logger>

    <root level="${logging.level}">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ROOT-APPENDER"/>
        <appender-ref ref="ERROR-APPENDER"/>
    </root>
</configuration>

说明:

  • 通过官网文档 创建工程 创建的 SOFABoot 工程,默认配置中创建了三个 appender,分别指向:

    • 标准输出(STDOUT):标准输出是为了保证本地运行时能将一些应用中的启动信息或者异常信息直接打印在控制台中。但是,控制台中并没有显示 SOFA 中间件的日志,中间件的日志均在指定目录的中间件日志目录下。

    • error 输出(ERROR-APPENDER)。

    • info 输出(ROOT-APPENDER)。

  • 此工程默认在 resources/config/application.properties 中,创建了两个日志相关的配置属性,分别是:

    • logging.level.com.alipay.sofa:表示应用的日志打印级别。

    • logging.path:表示应用的日志存储路径。

  • 配置映射关系: logback-spring.xml 中属性,通过属性关键字转换,分别映射到 application.properties 中的 logging.pathlogging.level ,示例如下:

    <springProperty scope="context" name="logging.path" source="logging.path"/>
    <springProperty scope="context" name="logging.level" source="logging.level.com.alipay.sofa"/>