AWS CloudWatch日志并使用springboot禁用服务器本身的日志

时间:2019-05-24 13:35:07

标签: amazon-web-services spring-boot server logback amazon-cloudwatch

在我的springboot应用程序中,我配置了将日志写入AWS CloudWatch,但是该应用程序还在服务器本身的/ var / 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>

1 个答案:

答案 0 :(得分:0)

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

<appender-ref ref="CONSOLE" />

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

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

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

sudo truncate -s 0 /var/log/WHATEVER

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

>

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

但是,到目前为止,您应该做的最重要的事情the Logback documentation