Linux 按照日期归档/删除日志文件

内容纲要

使用命令

# 压缩8天前多个日志文件到一个压缩包
find . -name 'filename_prefix*' -mtime +8 | xargs tar -czvf log_archive.tgz

# 删除多个日志文件
find . -name 'filename_prefix*' -mtime +8 | xargs rm -f

find -mtime 说明:

  1. -mtime +n: 表示n天前
  2. -mtime -n:表示n天后
  3. -mtime n: 表示n天

使用场景说明

日志文件过大导致服务器磁盘占用过高或者占完。
通常我们的系统的日志文件都是按照日期和日志文件大小Rolling的,比如:你项目里面的logback.xml 配置为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false" scanPeriod="60 seconds" debug="false">
    <property name="LOG_HOME" value="/app/applog/your_app"/>
    <property name="appName" value="your_app"/>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%magenta(%d{yyyy-MM-dd HH:mm:ss.SSS}) %yellow([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %green(%msg%n)
            </pattern>
        </layout>
    </appender>

    <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i-json.log</fileNamePattern>
            <MaxHistory>60</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
            </providers>
            <customFields>{"app": "${appName}" }</customFields>
        </encoder>
    </appender>

    <logger name="com.your.domain" level="info"/>
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <springProfile name="prod,test">
        <root level="info">
            <appender-ref ref="stdout"/>
            <appender-ref ref="appLogAppender"/>
        </root>
    </springProfile>
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="stdout"/>
            <appender-ref ref="appLogAppender"/>
        </root>
    </springProfile>
</configuration>

根据这个文件配置,如果一天的日志文件如果文件大小不超过100M则只有一个文件,如果日志文件超过100M就根据实际日志大小有两个或者多个文件。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部