Como Compactar Arquivos de Log Antigos Automaticamente com Python e Gzip

Como Compactar Arquivos de Log Antigos Automaticamente com Python e Gzip

Sistemas em produção acumulam arquivos de log diariamente, o que pode consumir rapidamente o espaço em disco se não houver um ciclo de limpeza ou compressão. A solução abaixo percorre um diretório, identifica arquivos com extensão .log modificados há mais do que um número determinado de dias e os compacta no formato .gz, liberando armazenamento sem perder o histórico.

Python

import os
import time
import gzip
import shutil

def compactar_logs_antigos(diretorio: str, dias_limite: int = 7) -> None:
    """
    Localiza logs alterados ha mais de `dias_limite` e os comprime em formato .gz.
    """
    segundos_limite = dias_limite * 86400
    tempo_atual = time.time()

    if not os.path.exists(diretorio):
        print(f"[ERRO] Diretório não encontrado: {diretorio}")
        return

    for arquivo in os.listdir(diretorio):
        caminho_completo = os.path.join(diretorio, arquivo)

        # Filtra apenas arquivos .log (ignora pastas e logs ja compactados em .gz)
        if os.path.isfile(caminho_completo) and arquivo.endswith(".log"):
            tempo_modificacao = os.path.getmtime(caminho_completo)

            # Verifica se a ultima modificacao excede o limite de dias definido
            if (tempo_atual - tempo_modificacao) > segundos_limite:
                caminho_gz = f"{caminho_completo}.gz"

                # Escreve o conteudo no arquivo comprimido e remove o original
                with open(caminho_completo, "rb") as f_in:
                    with gzip.open(caminho_gz, "wb") as f_out:
                        shutil.copyfileobj(f_in, f_out)

                os.remove(caminho_completo)
                print(f"[COMPACTADO] {arquivo} -> {arquivo}.gz")

# Exemplo de uso pratico
if __name__ == "__main__":
    pasta_logs = "./logs_aplicacao"
    
    # Compacta arquivos .log da pasta com mais de 7 dias de inatividade
    compactar_logs_antigos(pasta_logs, dias_limite=7)

Pontos-chave

  • Economia de Espaço: A compressão via formato Gzip reduz o tamanho de arquivos de texto puro em até 80-90%, ideal para retenção de dados a longo prazo.
  • Timestamp de Modificação: A função os.path.getmtime() retorna a data/hora do último ajuste do arquivo em segundos desde a Epoch, permitindo cálculos simples de diferença de tempo (86400 segundos = 24 horas).
  • shutil.copyfileobj: Transfere dados em streams em blocos de memória em vez de carregar arquivos inteiros para a RAM, garantindo estabilidade mesmo em logs gigantescos de vários gigabytes.
  • Agendamento no S.O.: Para automação contínua de rotina em servidores de infraestrutura, agende a execução deste script via cron (Linux) ou Task Scheduler (Windows).

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *