@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.
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
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.
Corrigido por # 205.
incrível!
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)