首页 > 解决方案 > AWS CloudWatch 使用 springboot 记录并禁用服务器本身的日志

问题描述

在我的springboot应用程序中,我配置将日志写入AWS CloudWatch,但是该应用程序还在服务器本身的/var/log/文件夹中生成了一个日志文件log,现在日志文件甚至大于19G

如何禁用服务器本身的日志,只将日志写入 CloudWatch?

以下是我当前的 logback-spring.xml 配置。任何想法都会不胜感激。提前致谢。

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

    <configuration>

    <include resource="org/springframework/boot/logging/logback/base.xml" />

    <springProperty scope="context" name="ACTIVE_PROFILE" source="spring.profiles.active" />

    <property name="clientPattern" value="payment" />  

    <logger name="org.springframework">

    <level value="INFO" />

    </logger>

    <logger name="com.payment">

    <level value="INFO" />

    </logger>

    <logger name="org.springframework.ws.client.MessageTracing.sent">

    <level value="TRACE" />

    </logger>

    <logger name="org.springframework.ws.client.MessageTracing.received">

    <level value="TRACE" />

    </logger>

    <logger name="org.springframework.ws.server.MessageTracing">

    <level value="TRACE" />

    </logger>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

    <layout class="ch.qos.logback.classic.PatternLayout">

    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [${HOSTNAME}:%thread] %-5level%replace([${clientPattern}] ){'\[\]\s',''}%logger{50}: %msg%n

    </pattern>

    </layout>

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

    <level>TRACE</level>

    </filter>

    </appender>

    <springProfile name="local,dev">

    <root level="INFO">

    <appender-ref ref="CONSOLE" />

    </root>

    </springProfile>

    <springProfile name="prod,uat">

    <timestamp key="date" datePattern="yyyy-MM-dd" />

    <appender name="AWS_SYSTEM_LOGS" class="com.payment.hybrid.log.CloudWatchLogsAppender">

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

    <level>TRACE</level>

    </filter>

    <layout>

    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [${HOSTNAME}:%thread] %-5level%replace([${clientPattern}] ){'\[\]\s',''}%logger{50}:

    %msg%n

    </pattern>

    </layout>

    <logGroupName>${ACTIVE_PROFILE}-hybrid-batch</logGroupName>

    <logStreamName>HybridBatchLog-${date}</logStreamName>

    <logRegionName>app-northeast</logRegionName>

    </appender>

    <appender name="ASYNC_AWS_SYSTEM_LOGS" class="ch.qos.logback.classic.AsyncAppender">

    <appender-ref ref="AWS_SYSTEM_LOGS" />

    </appender>

    <root level="INFO">

    <appender-ref ref="ASYNC_AWS_SYSTEM_LOGS" />

    <appender-ref ref="CONSOLE" />

    </root>

    </springProfile>

    </configuration>

标签: amazon-web-servicesspring-bootserverlogbackamazon-cloudwatch

解决方案


最可能的解决方法是删除此行:

<appender-ref ref="CONSOLE" />

我说“最有可能”是因为这只是将输出写入控制台。这意味着还有其他东西将输出重定向到/var/log/whatever,可能在您的应用程序的启动脚本中。

包含的默认文件 , 也可能是org/springframework/boot/logging/logback/base.xml因为该文件定义了文件附加程序。我不知道显式<root>定义是否会完全覆盖或只是更新包含的默认值,但除非你知道你需要默认值,否则我会删除该<include>语句。

如果您需要从现有日志文件中恢复空间,您可以截断它:

sudo truncate -s 0 /var/log/WHATEVER

删除它不是正确的解决方案,因为在应用程序显式关闭它(这意味着重新启动服务器)之前,它实际上不会被删除

正如其中一位评论者所建议的那样,您可以使用logrotate来防止磁盘文件变得太大。

到目前为止,您应该做的最重要的事情是阅读Logback 文档


推荐阅读