Winston: Adicionar capacidade de transporte de arquivo para dividir logs por data

Criado em 29 mai. 2011  ·  12Comentários  ·  Fonte: winstonjs/winston

@indexzero -

O que você acha de adicionar um parâmetro de API opcional ao transporte de arquivos para que ele possa dividir os arquivos de log por data? A ideia seria que a cada novo dia, um novo arquivo de log fosse criado e o Winston iria automaticamente lidar com tudo isso / saber em qual arquivo de log escrever com base na data.

feature request

Comentários muito úteis

Não há necessidade de complicar o código winston quando existe uma ferramenta padrão para esta tarefa: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

Todos 12 comentários

Aceitaria a solicitação de patch para este

Legal! Alguma sugestão para uma API? Eu estava pensando algo como:

           // Specify path option and default to spanning by day ( 24 hours in each file )
           new (winston.transports.File)({ path: './logs' })

mas pode haver alguma utilidade em permitir um filtro de data / hora personalizado.

Não há necessidade de complicar o código winston quando existe uma ferramenta padrão para esta tarefa: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

@indexzero O patch para isso ainda é aceitável? Eu sei que isso pode ser implementado por meio da opção de nome de arquivo, mas posso adicionar outra opção para isso.

não é tarefa de daemons individuais para cada rotação de log do implemento. é por isso que temos ferramentas como logrotate, como disse @cemuzunlar .

@cemuzunlar @Dieterbe

Eu concordo, idealmente, este não seria o problema de winston, mas

  • winston roda no Windows, que não tem logrotate, apesar de várias tentativas simples (de aparência fraca) em vários blogs (e algumas sugestões para usar cygwin + um logrotate auto-compilado, mas eu duvido que isso seja possível em bases teóricas, assumindo que o winston mantém o arquivo aberto para gravação, o que restringe severamente o que você pode fazer com aquele arquivo no Windows)
  • O transporte de arquivos do winston já faz a rotação do log, apenas divide por tamanho de arquivo, não por data. E também exclui arquivos antigos, por isso é toda a funcionalidade básica de rotação de log

Eu vejo...
pensando em voz alta: movendo a lógica de rotação de log para um programa de nó separado, então é um clone logrotate simples reutilizável que funciona em todas as plataformas.

++ 1

Embora eu também seja um defensor do logrotate, ele não faz seu trabalho sozinho. O logrotate é muito útil porque fornece um método para informar aos programas que é hora de liberar e fechar seus logs.

O transporte de arquivo tem uma função _createStream.checkFile.createAndFlush que à primeira vista parece que deve fazer as coisas apropriadas. Para usar isso para logrotate, faça com que seu programa de nó intercepte SIGHUP e acesse esta função. Não tenho tempo antes do meu dayjob para postar código, mas vou tentar hoje à noite e postar meus resultados.

Responder ao SIGHUP desta maneira deve ser transportável para o Windows, e então qualquer rotação de log que você usar no Windows (biblioteca de nós ou outra mágica) é deixada como um exercício para o leitor.

Caso alguém esteja procurando por isso:

Obrigado pela dica, @pccowboy. Também sou um grande defensor do logrotate. Estou relutante em usar uma configuração para o serviço node.js (ou seja, winston File maxsize, etc) e outra (logrotate) para outros serviços (nginx, redis, etc) e preferiria usar logrotate para todos os meus arquivos de log. Eu criei uma função simples que irá ouvir os sinais do HUP e reabrir o arquivo de log após a rotação.

Se eu tiver uma chance, tentarei reescrever isso de uma maneira mais limpa (ou seja, como uma opção de configuração para o transporte de arquivo) e criar uma solicitação pull.

https://gist.github.com/suprememoocow/5133080

Corrigido por # 205.

incrível!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

sinai-doron picture sinai-doron  ·  3Comentários

pocesar picture pocesar  ·  3Comentários

greenhat616 picture greenhat616  ·  3Comentários

JaehyunLee-B2LiNK picture JaehyunLee-B2LiNK  ·  3Comentários

Infinitay picture Infinitay  ·  3Comentários