A página man do logrotate diz que: Im confused por este. Se um programa não pode ser dito para fechar seu arquivo de log, ele continuará a escrever para sempre. Não por algum tempo. Se a compressão for adiada para o próximo ciclo de rotação, o programa continuará a gravar nesse arquivo mesmo após o próximo ciclo de rotação. Como é adiar a solução do problema Minha compreensão é que copytruncate deve ser usado quando um programa não pode ser dito para fechar o arquivo de log. Estou ciente de que alguns dados gravados no arquivo de log são perdidos quando a cópia está em andamento. Eu estava olhando para o arquivo logrotate para couchdb, e tinha ambas as opções copytruncate e delaycompress. Parece que não há nenhum ponto usando delaycompress quando copytruncate já está lá. O que estou perdendo perguntou Jul 21 11 at 2: 14Im trabalhando no Ubuntu 14 com o padrão rsyslog e logrotate utilidade. No padrão rsyslog logrotate etclogrotate. drsyslog config eu vejo o seguinte: Pelo que eu entendo, é recomendável usar copytruncate em todos os cenários logrotate, como ele não move o log atual, mas trunca o log para que qualquer processo com um arquivo aberto Manipulador será capaz de continuar escrevendo para ele. Então, como é que a configuração padrão usando rsyslog recarregar recurso em vez perguntou 05/05 às 7:40 Para responder a sua pergunta, você punho precisa entender o trade-off diferentes de recarregar e copytruncate: recarregar. O arquivo de log antigo é renomeado eo processo de gravação nesse log é notificado (via sinal Unix) para recriar seu arquivo de log. Este é o método de overhead mais rápido: as operações renamemove são muito rápidas e têm um tempo de execução constante. Além disso, é uma operação quase atômica: isso significa que (quase) nenhuma entrada de registro será perdida durante a movimentação. Por outro lado, você precisa de um processo capaz de recarregar e reabrir seu arquivo de log. Rsyslog é um processo, portanto, o padrão logrotate config usar o método reload. Copytruncate. O ficheiro de registo antigo é copiado para um ficheiro de arquivo e, em seguida, é truncado para eliminar linhas de registo antigas. Enquanto a operação truncada é muito rápida, a cópia pode ser bastante longa (dependendo de quão grande é o seu logfile). Além disso, alguma entrada de log pode ser perdida durante o tempo entre a operação de cópia (lembre-se, pode ser lento) eo truncar. Por estas razões, copytruncate não é usado por padrão para serviços capazes de recarregar e recriar seus arquivos de log. Por outro lado, se um servidor não é capaz de reloadrecreate arquivos de log, copytruncate é a sua aposta mais segura. Em outras palavras, ele não requer nenhum suporte de nível de serviço. Respondeu May 5 15 at 7:50 I39m limitando meus arquivos de log para 500M cada, então copiá-los won39t ser um problema (vários segundos no máximo). Obrigado ndash Mattan May 5 15 at 7:57 Isso depende completamente de como o processo está escrevendo logs. Copytruncate só funciona, se as mensagens de log são anexadas ao arquivo (por exemplo, o que gtgt logfile. E não quando ele está redirecionando a saída (por exemplo, qualquer gt logfile).Para rsyslog especificamente, provavelmente faz mais sentido deixar as coisas como eles são A razão básica é que o rsyslog tem filas internas que pode usar nos casos em que seu identificador de saída se torna indisponível. A recarga irá a) fazer com que o rsyslog recrie seu próprio arquivo de log eb) fazer com que todos os eventos enfileirados sejam limpos para o arquivo no criação. Pode ser copytruncate faz nenhum dano (embora eu estaria preocupado com linhas parcialmente escritas sendo truncado), mas eu tenderia a pensar que copydeletereload é mais seguro de um ponto de vista de integridade. Conforme mencionado pelo falso. Desde rsyslog pode lidar com a situação onde seu arquivo torna-se indisponível, não há uma razão convincente para usar copytruncate. E como mencionado por SelivanovPavel. Rsyslog realmente requer configuração específica para lidar com cópia truncada corretamente. Então, se apenas porque usar a abordagem de recarga requer menos desvio da configuração padrão, eu iria mantê-lo. Sua resposta 2017 Stack Exchange, IncI quero usar log4j para gravar logs relacionados a auditoria para um arquivo de log específico, vamos dizer audit. log. Eu não quero usar syslogappender (baseado em udp) porque eu não quero ser tolerante à perda de dados. Além disso, estou usando logrotate para girar o audit. log quando o arquivo obtém a determinado tamanho. Estou encontrando é que, quando logrotate gira o arquivo audit. log para audit. log.1, log4j continua escrevendo para audit. log.1 diferente de escrever para o audit. log. Eu sei que eu posso usar rollingfileappender para fazer a rotação de log diferente de usar logrotate, então quando rollingfileappender rola o arquivo, ele alternar para o novo arquivo sem aborrecimentos. Mas a razão que eu não posso usar rollingfileappender é que eu quero usar logrotates post girar recurso para acionar alguns scripts após a rotação acontece que não podem ser fornecidos por rollingfileappender. Outra maneira desesperada que eu posso pensar é escrever um log4j personalizado appender-me para fechar o arquivo de log (audit. log.1) e abrir o novo (audit. log) quando ele detecta o arquivo é girado. Eu nunca usei ExternallyRolledFileAppender, mas se é possível usar logrotate post girar para enviar o sinal para ExternallyRolledFileAppender e fazer log4j ciente do arquivo é girado e começar a escrever para o novo arquivo Apenas querendo saber se existe algum appender como que já foi inventado ou eu Outras opções para resolver este problema.
No comments:
Post a Comment