我有一个Spring Boot应用程序,并使用log4j2在centos linux中生成控制台和持久化日志。
我想在存档中只维护5mb的日志文件。
但问题是,我的归档日志文件总共有5mb。但我的主控制台日志保存在主日志文件中,即wc通知。输出超过1mb。
因此,我的磁盘已满,这导致了一个问题。
蛮力方法的解决方案是:每当重新启动(硬停止和启动)我的spring boot应用程序时,都会从wc通知中清除日志。出来
我的log4j2配置xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
[ %d{yyyy-MMM-dd HH:mm:ss a} ] - [%t] %-5level %logger{36} - %msg%n
</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<RollingFile name="FileAppender" fileName="/home/ec2-user/apps/wc-notification-service/wc-notification.out"
filePattern="/home/ec2-user/apps/wc-notification-service/archives_test/wc-notification.out-%d{yyyy-MM-dd}-%i">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1MB" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="logs" maxDepth="1">
<IfFileName glob="wc-notification.out-*.log" />
<IfLastModified age="1m" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<!--<AppenderRef ref="ConsoleAppender" /> -->
<AppenderRef ref="FileAppender" />
</Root>
</Loggers>
</Configuration>
不知何故,文件在1mb的范围内,滚动策略正在工作,它正在删除文件
但是,我的磁盘空间仍然被空间占用。原因可能是什么?
你行为的原因如下:看你的参数
appender.gateway.policies.size.size=1MB
appender.gateway.strategy.type = DefaultRolloverStrategy
appender.gateway.strategy.max = 5
您在这里要问的是,日志文件应该允许增长到1M。一旦它达到1M大小,就会复制到日志文件中。log-1和一个新文件logfile。日志已创建。当文件生成时,您需要只保留最后5个文件。旧文件会自动删除。因此,看起来行为与您配置的完全相同。您可以做的是将配置为保留5个以上的文件,并且可能保留在另一个文件夹中,在该文件夹中您有足够的空间。
您需要利用RollingFileAppender的DeleteAction。我建议看一下文档,因为有很多很好的例子。
当您提供自己的log4j2时。默认情况下,您将使用/j2配置来覆盖日志文件。
您的配置几乎正确。如果您希望实现所需的行为,我建议您进行以下更改:
请注意,您的Delete
操作basePath
指向了错误的位置,它应该指向存储日志的目录
由于这些原因,您的日志没有被正确删除,并且占用的磁盘空间大于所需的数量。在不删除的情况下,您的日志文件将按照您的
SizeBasedTriggeringPolicy
配置的1MB
进行旋转,并将一直保持旋转,直到默认情况下DefaultRollorOverstrategy
的max
属性的值达到,并且始终加上当前日志文件的数量。
总之,请尝试以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
[ %d{yyyy-MMM-dd HH:mm:ss a} ] - [%t] %-5level %logger{36} - %msg%n
</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<RollingFile name="FileAppender" fileName="/home/ec2-user/apps/wc-notification-service/wc-notification.out"
filePattern="/home/ec2-user/apps/wc-notification-service/wc-notification.out-%d{yyyy-MM-dd}-%i">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1MB" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="/home/ec2-user/apps/wc-notification-service">
<IfFileName glob="wc-notification.out-*" />
<IfAccumulatedFileSize exceeds="5 MB" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<!--<AppenderRef ref="ConsoleAppender" /> -->
<AppenderRef ref="FileAppender" />
</Root>
</Loggers>
</Configuration>
该解决方案依赖于将所有日志存储在同一位置。它会影响你的
RollingFile
filePattern
属性。
请小心删除操作,它不仅可以删除您的日志文件,还可以删除所有符合您的
全局模式
的文件。
此外,尽管可能与您的用例无关,但请注意,如果存档文件的
filePattern
以". gz"、". zip"、". bz2"等结尾,则将使用匹配的压缩方案对结果存档进行压缩后缀,如果需要,它可以允许您为相同的空间存储更多的档案。
对于您的评论,似乎您在使用大文件时遇到了一个问题:请看这个bug,我认为它清楚地描述了您的问题。
我最好的建议是将日志文件的大小减小到它正常工作的大小,或者尝试更新版本的库。
我知道您正在使用SpringBoot来管理依赖关系:请验证您的maven树,查看您正在使用的实际版本库,并在必要时进行更改。
我的log4j2中有此配置。xml文件: 我将此文件放在src/resources中,并遵循以下指南:guide,但当我运行项目时,出现以下错误:
主要内容:1. 设置错误日志,2. 设置访问日志,3. 启用条件日志记录,4. 日志记录到Syslog本节介绍如何在NGINX中配置日志记录错误和处理的请求。在本文章中将涉及以下内容 - 设置错误日志 设置访问日志 启用条件日志记录 日志记录到Syslog 1. 设置错误日志 NGINX将遇到的不同严重性级别问题的信息写入错误日志。 指令将日志记录设置为特定文件,或,并指定要记录的消息的最低级别。 默认情况下,错误日志位于(绝对路径取决于操作系统和安装),并记录来自所指定的所有严重级别的消息。
我正在用systemd-Jourald来处理小硬结 使用/etc/systemd/journald中的以下配置。形态: 但这种配置似乎并不适用。当我重新启动journald时,我会得到以下条目: 然后/run总是100%命中,日志被截断而不更新。
partition/data只有15G,kafka日志文件夹是-/data/var/kafka/kafka-logs data/var/kafka/kafka-logs下的大多数文件夹大小为4K-40K 但两个文件夹的大小非常大--5G-7G,这导致/数据是100%
Seafile 服务器有如下日志文件: seafile.log: Seafile服务器的日志 controller.log: 控制器的日志 seahub_django_request.log: Seahub的日志 seahub.log: Django 框架和电子邮件发送的日志 Ccnet Log: logs/ccnet.log (内部 RPC 的日志, 没有实际用处) 专业版特有日志文件: sea
在传统的weblogic容器中部署spring boot web应用程序时,我遇到了一些与日志相关的异常。同一个应用程序在嵌入式tomcat上运行良好,无需对其进行任何更改。 对于weblogic 12 c,我看到了一个例外: ulticaster.java:98Aorg.springframework.boot.context.event.InstanceOf(Aistener.publish)