Publicado em 25 de novembro de 2016  
Em , ,  


Depois de algum tempo desenvolvendo dentro do ecossistema da Apple, me deparei com um pequeno problema: os arquivos de logs das minhas aplicações consumindo consideravelmente o espaço de armazenamento. Principalmente em máquinas com armazenamento reduzido devido ao custo de um SSD.

Quem já trabalhou com Linux provavelmente conhece o Logrotate, e seu eficiente rotacionamento de arquivos de logs. Existe algo semelhante pro MacOS ou OS X? Sim, existem algumas maneiras.

Introdução

Em minhas pesquisas encontrei diversas alternativas, porém apenas duas realmente me agradaram:

  • Logrotate
  • Newsyslog

Optei pelo Newsyslog pelos seguintes fatores:

  1. O Logrotate demandaria algumas configurações adicionais, além das configurações necessárias pras rotinas.
  2. O Newsyslog é nativo do sistema operacional, enquanto que o Logrotate significaria um processo adicional sendo executado.
  3. O Logrotate demandaria atualizações manuais por não ser nativo.

Importante

Apesar de escolher o Newsyslog admito que o Logrotate é muito mais robusto, oferecendo mais opções de configuração e funcionalidades às rotinas. Tanto que continuo a utiliza-lo em ambientes de produção.

Configuração

O Newsyslog lê os arquivos /etc/newsyslog.conf e /etc/newsyslog.d/*.conf para definir as rotinas. Aconselho que você crie sua própria configuração ao invés de editar a principal, para isso abra o Terminal e execute sudo nano /etc/newsyslog.d/exemplo.conf. Este comando criará o arquivo de configuração e abrirá o editor de texto (como root). Copie e cole o código abaixo e salve o arquivo.

# logfilename                  [owner:group] mode count size when   flags [/pid_file] [sig_num]
/caminho/pro/log/arquivo_1.log :             644  5     1024 *      NZ
/caminho/pro/log/arquivo_2.log :             644  5     *    $D23   NZ

Este código agendará as seguintes rotinas:

  • Rotacionar arquivo_1.log caso ele seja maior que 1 MB, comprimindo-o com gzip
  • Rotacionar arquivo_2.log todos os dias às 23 horas, comprimindo-o com gzip

Para obter mais informações sobre os agendamentos que acabamos de fazer, execute o comando sudo newsyslog -v:

/caminho/pro/log/arquivo_1.log : does not exist, skipped.
/caminho/pro/log/arquivo_2.log : does not exist, skipped.

Leia as documentações do Newsyslog para mais informações sobre como utiliza-lo e configura-lo:

Conclusão

O Newsyslog me atende muito bem em meus ambientes de desenvolvimento, mas sei que existem diversas formas de rotacionar os arquivos de log. Optou pelo Logrotate? Utiliza um método diferente? Deixe seu comentário.