用于 Spring Boot 应用程序的 AWS Cloudwatch Logback Appender

ndu*_*eck 5 java logback amazon-cloudwatch spring-boot

我正在尝试将日志从 Spring Boot 应用程序直接发送到 Cloudwatch。我正在使用Logback Appender当然需要 AWS 凭证。由于大多数开发人员在他们的本地机器上没有 AWS 凭证,只想根据 logback-spring.xml 配置登录到一个文件。大多数测试在本地失败,因为缺少 aws 凭据。
有没有办法只为特定的配置文件初始化 logback appender?
这是 logback-spring.xml 的快照:

<!--  Configuration for your local environment -->
<springProfile name="${user.name}">
    <root level="DEBUG">
        <appender-ref ref="ROLLING_FILE" />
    </root>
</springProfile>

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    ...
</appender>


<!-- Configuration for Development Environment --> 
<springProfile name="dev">
    <root level="DEBUG">
        <appender-ref ref="AWS_LOGS_DEV" />
        <appender-ref ref="ROLLING_FILE" />
    </root>
</springProfile>

<appender name="AWS_LOGS_DEV" class="ca.pjer.logback.AwsLogsAppender">
    <layout>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </layout>
    <logGroupName>/dev</logGroupName>
    <logStreamName>log_${date}</logStreamName>
</appender>
Run Code Online (Sandbox Code Playgroud)

ndu*_*eck 4

已经解决了。您只需将附加程序提取到另一个 logback 文件:

logback-spring.xml

<!--  Configuration for your local environment -->
<springProfile name="${user.name}">
    <root level="DEBUG">
        <appender-ref ref="ROLLING_FILE" />
    </root>
</springProfile>

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    ...
</appender>


<!-- Configuration for Environment in AWS, extracted into its own logback-prod.xml file--> 
<springProfile name="prod">
    <include resource="logback-prod.xml" />
</springProfile>
Run Code Online (Sandbox Code Playgroud)

logback-prod.xml

<included>
    <root level="DEBUG">
        <appender-ref ref="AWS_LOGS_DEV" />
        <appender-ref ref="ROLLING_FILE" />
    </root>
    
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
    <appender name="AWS_LOGS_DEV" class="ca.pjer.logback.AwsLogsAppender">
        <layout>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </layout>
        <logGroupName>/prod</logGroupName>
        <logStreamName>log_${date}</logStreamName>
        <maxBatchLogEvents>200</maxBatchLogEvents>
        <maxFlushTimeMillis>30000</maxFlushTimeMillis>
        <maxBlockTimeMillis>5000</maxBlockTimeMillis>
    </appender>
</included>
Run Code Online (Sandbox Code Playgroud)