amazon-web-services - 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>
解决方案
最可能的解决方法是删除此行:
<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 文档。
推荐阅读
- java - 使用 DirectProcessor 处理多个生产者
- mysql - 在 MySQL 日期函数中获取空日期的值
- matlab - Matlab第二组轴的尺寸与第一组不同
- python-3.x - 有什么方法可以使用 python 在高音扬声器中下载全文
- javascript - 当 SpeedDial 仅在单击时打开(不悬停)时,如何让 Material-UI SpeedDialAction onClick 事件触发
- python - 根据特定条件从python中的数据框中选择随机行
- javascript - 使用当前不支持的 applyConstraints 切换面临模式(媒体流 Api)
- python - 使用 virtualenvwrapper 在子文件夹中创建虚拟环境
- javascript - 无法读取未定义的 React js 的属性“函数名称”
- database - 一个 GET API 调用中应该嵌套多少数据?