Eu quero usar log4j para escrever logs relacionados à auditoria em um arquivo de log específico, digamos audit. log. Eu não quero usar syslogappender (baseado em udp) porque eu não quero ser tolerante à perda de dados. Além disso, eu estou usando logrotate para girar o audit. log quando o arquivo chegar a determinado tamanho. Estou encontrando é que, quando logrotate roda o arquivo audit. log para audit. log.1, log4j continua escrevendo para audit. log.1 além de escrever para audit. log. Eu sei que posso usar o rollingfileappender para fazer a rotação do log, exceto usar logrotate, então, quando rollingfileappender rola o arquivo, ele muda para o novo arquivo sem aborrecimentos. Mas a razão pela qual eu não posso usar o RollFileappender é que eu quero usar o recurso de rotação de rotas de logro para desencadear alguns scripts depois que a rotação acontece, o que não pode ser fornecido pelo rollingfileappender. Outra maneira desesperada que posso pensar é escrever um app4 personalizado personalizado do log4j 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 rotate para enviar o sinal para ExternallyRolledFileAppender e tornar log4j consciente do arquivo girado e começar a escrever para o novo arquivo. Apenas querendo saber se há algum appender como esse já foi escrito por inventário ou eu? Tem outras opções para resolver isso. Estou trabalhando no Ubuntu 14 com o utilitário rsyslog e logrotate padrão. No rsyslog padrão logrotate etclogrotate. drsyslog config eu vejo o seguinte: Do que eu entendo, recomenda-se usar copytruncate em todos os cenários logrotate, pois não move o log atual, mas sim trunca o log para que qualquer processo com um arquivo aberto O manipulador poderá continuar escrevendo para ele. Então, como é que a configuração padrão usando o recurso de recarregamento rsyslog, em vez disso, perguntou 5 de maio 15 às 7:40 Para responder sua pergunta, você precisa entender o trade-off diferente de recarregar e copiar: recarregar. O arquivo de registro antigo é renomeado e a escrita do processo nesse log é notificada (via sinal Unix) para recriar seu arquivo de log. Este é o método de sobrecarga mais rápido 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 log será perdida durante a carga. Por outro lado, você precisa de um processo capaz de recarregar e reabrir seu arquivo de log. Rsyslog é um processo assim, então o logrotate config padrão usa o método recarregar. Copiar. O arquivo de log antigo é copiado para um arquivo de arquivo e, em seguida, é truncado para excluir linhas de log antigas. Enquanto a operação truncada é muito rápida, a cópia pode ser bastante longa (dependendo de quão grande é seu arquivo de log). Além disso, algumas entradas de log podem ser perdidas durante o tempo entre a operação de cópia (lembre-se, pode ser lento) e 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 for capaz de recarregar arquivos de log, copytruncate é a sua aposta mais segura. Em outras palavras, não exige suporte a nível de serviço. Respondeu 5 de maio às 7:50 I39m limitando meus arquivos de log a 500M cada, então copiá-los não é um problema (vários segundos no máximo). Obrigado ndash Mattan 5 de maio 15 às 7:57 Isso depende completamente de como o processo está escrevendo logs. O copytruncate funciona apenas, se as mensagens de log estiverem anexadas ao arquivo (por exemplo, qualquer arquivo de log gtgt. E não quando é redirecionar a saída (por exemplo, qualquer arquivo de log gt). A página man de logrotate diz que: Estou confuso com isso. Se um programa Não pode ser dito para fechar seu arquivo de registro, 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 continua a escrever para esse arquivo mesmo após o próximo ciclo de rotação. Como adiar resolver o problema O meu entendimento é que o copytruncate deve ser usado quando um programa não pode ser informado para fechar o arquivo de log. Estou ciente de que alguns dados escritos no logfile se perdem quando a cópia está em progresso. Eu estava olhando o arquivo logrotate para o couchdb e tinha As opções de copiar e compactar e comprimo as vezes. Parece que não há nenhum ponto usando delaycompressar quando o copytruncate já está lá. O que estou faltando perguntou 21 de julho 11 em 2: 14logrotate (8) - Página do manual do Linux Descrição logrotate foi projetado para Facilite a administração de sistemas que geram um grande número de arquivos de log. Permite rotação automática, compressão, remoção e envio de arquivos de log. Cada arquivo de log pode ser tratado diariamente, semanalmente, mensalmente ou quando ele cresce demais. Normalmente, logrotate é executado como um trabalho cron diário. Não modificará um log várias vezes em um dia, a menos que o critério desse log seja baseado no tamanho dos logs e o logrotate esteja sendo executado várias vezes por dia, ou a menos que a opção - f ou --force seja usada. Qualquer número de arquivos de configuração pode ser fornecido na linha de comando. Arquivos de configuração posteriores podem substituir as opções fornecidas em arquivos anteriores, de modo que a ordem na qual os arquivos de configuração logrotate estão listados é importante. Normalmente, um único arquivo de configuração que inclui qualquer outro arquivo de configuração que seja necessário deve ser usado. Veja abaixo para obter mais informações sobre como usar a diretriz de inclusão para realizar isso. Se um diretório é fornecido na linha de comando, cada arquivo nesse diretório é usado como um arquivo de configuração. Se nenhum argumento de linha de comando for dado, o logrotate imprimirá a versão e as informações de direitos autorais, juntamente com um breve resumo de uso. Se ocorrerem erros durante a rotação de logs, logrotate irá sair com status diferente de zero. - d, --debug Liga o modo de depuração e implica - v. No modo de depuração, nenhuma alteração será feita nos logs ou no arquivo de estado logrotate. - f. --force Diz logro para forçar a rotação, mesmo que não pense que isso é necessário. Às vezes, isso é útil depois de adicionar novas entradas a um arquivo de configuração logrotate, ou se os arquivos de log antigos foram removidos manualmente, à medida que os novos arquivos serão criados e o registro continuará corretamente. - m. --mail ltcommandgt Diz que logrotate qual comando usar quando os registros de correspondência. Este comando deve aceitar dois argumentos: 1) o assunto da mensagem e 2) o destinatário. O comando deve então ler uma mensagem na entrada padrão e enviá-la para o destinatário. O comando de correio padrão é binmail - s. - s, --tate ltstatefilegt Diz logrotate para usar um arquivo de estado alternativo. Isso é útil se logrotate estiver sendo executado como um usuário diferente para vários conjuntos de arquivos de log. O arquivo de estado padrão é varliblogrotate. status. --usage Imprime uma mensagem curta de uso. - -. - Ajuda - Prints ajuda mensagem. - v. --verbose Liga o modo detalhado. O arquivo de configuração logrotate lê tudo sobre os arquivos de log que devem ser manipulados a partir da série de arquivos de configuração especificados na linha de comando. Cada arquivo de configuração pode definir opções globais (as definições locais substituem as globais e as definições posteriores anulam as anteriores) e especifique os arquivos de log para rotação. Um arquivo de configuração simples se parece com isto: as primeiras linhas definem opções globais no exemplo, os logs são compactados após serem girados. Observe que os comentários podem aparecer em qualquer lugar no arquivo de configuração, desde que o primeiro caractere de não-espaço na linha seja a. A próxima seção dos arquivos de configuração definiu como lidar com o arquivo de log varlogmessages. O registro passará por cinco rotações semanais antes de ser removido. Depois que o arquivo de log foi girado (mas antes que a versão antiga do log tenha sido compactada), o comando sbinkillall - HUP syslogd será executado. A próxima seção define os parâmetros para varloghttpdaccess. log e varloghttpderror. log. Eles são girados sempre que cresce com mais de 100k de tamanho, e os arquivos de logs antigos são enviados (sem compressão) para wwwmy. org depois de passar por 5 rotações, em vez de serem removidos. O sharedscripts significa que o script pós-versão só será executado uma vez (depois que os logs anteriores foram compactados), não uma vez para cada log que é girado. Observe que as aspas duplas em torno do primeiro nome de arquivo no início desta seção permitem logrotate rotear logs com espaços no nome. São aplicadas regras de cotação de shell normais, com, e caracteres suportados. A última seção define os parâmetros para todos os arquivos em varlognews. Cada arquivo é rodado mensalmente. Esta é considerada uma única diretiva de rotação e, se ocorrerem erros para mais de um arquivo, os arquivos de log não são compactados. Use curingas com cuidado. Se você especificar, o logrotate girará todos os arquivos, incluindo os que já foram girados. Uma maneira de usar isso é usar a diretiva olddir ou um curinga mais exato (como. log). Aqui está mais informações sobre as diretrizes que podem ser incluídas em um arquivo de configuração logrotate: compress As versões antigas de arquivos de log são compactadas com o gzip (1) por padrão. Veja também nocompress. Compresscmd Especifica qual comando usar para compactar arquivos de log. O padrão é o gzip. Veja também a compressão. Uncompresscmd Especifica qual comando usar para descompactar arquivos de log. O padrão é gunzip. Compressext Especifica qual extensão usar em arquivos de log compactados, se a compactação estiver ativada. O padrão segue o comando de compactação configurado. Compressoptions As opções de linha de comando podem ser passadas para o programa de compressão, se um estiver em uso. O padrão, para gzip (1), é -9 (compressão máxima). Copiar Faça uma cópia do arquivo de log, mas não mude o original. Esta opção pode ser usada, por exemplo, para fazer um instantâneo do arquivo de log atual ou quando algum outro utilitário precisa truncar ou analisar o arquivo. Quando essa opção é usada, a opção de criação não terá efeito, pois o arquivo de log antigo permanece no lugar. Copytruncate Trunca o arquivo de registro original no lugar depois de criar uma cópia, em vez de mover o arquivo de log antigo e, opcionalmente, criar um novo. Ele pode ser usado quando algum programa não pode ser informado para fechar seu arquivo de registro e assim pode continuar a escrever (anexar) ao arquivo de log anterior para sempre. Observe que há uma fatia de tempo muito pequena entre copiar o arquivo e truncar, portanto, alguns dados de log podem ser perdidos. Quando essa opção é usada, a opção de criação não terá efeito, pois o arquivo de log antigo permanece no lugar. Criar o grupo do proprietário do modo Imediatamente após a rotação (antes do script postrotate ser executado), o arquivo de log é criado (com o mesmo nome do arquivo de log que acabou de girar). Modo especifica o modo para o arquivo de log em octal (o mesmo que chmod (2)), o proprietário especifica o nome de usuário que será o proprietário do arquivo de log e o grupo especificará o grupo ao qual o arquivo de log pertencerá. Qualquer um dos atributos do arquivo de log pode ser omitido, caso em que esses atributos para o novo arquivo usarão os mesmos valores que o arquivo de log original para os atributos omitidos. Esta opção pode ser desativada usando a opção nocreate. Os arquivos de log diários são girados todos os dias. Dateext Arquiva versões antigas de arquivos de log adicionando uma extensão diária como YYYYMMDD em vez de simplesmente adicionar um número. A extensão pode ser configurada usando a opção dateformat. Dateformat formatstring Especifique a extensão para dateext usando a notação semelhante à função strftime (3). Somente os especificadores de Y m d e s são permitidos. O valor padrão é - Ymd. Observe que também o caractere que separa o nome do registro da extensão faz parte da string dateformat. O relógio do sistema deve ser definido após 9 de setembro de 2001 para que o s funcione corretamente. Tenha em atenção que os datastamps gerados por este formato devem ser lexicamente classificáveis (por exemplo, primeiro ano, depois o mês e o dia. Por exemplo, 20011201 está ok, mas 01122001 não é, uma vez que 01112002 classificaria mais baixo enquanto era posterior). Isso ocorre porque ao usar a opção de rotação, logrotate classifica todos os nomes de arquivos girados para descobrir quais arquivos de log são mais antigos e devem ser removidos. Delaycompress Adiar a compressão do arquivo de log anterior para o próximo ciclo de rotação. Isso só tem efeito quando usado em combinação com a compressa. Ele pode ser usado quando algum programa não pode ser informado para fechar seu arquivo de log e assim pode continuar escrevendo para o arquivo de log anterior por algum tempo. Extensão ext Os arquivos de log com extensão ext podem mantê-lo após a rotação. Se a compressão for utilizada, a extensão de compressão (normalmente. gz) aparece após o ext. Por exemplo, você possui um arquivo de log chamado mylog. foo e deseja roteá-lo para mylog.1.foo. gz em vez de mylog. foo.1.gz. Ifempty Gire o arquivo de log, mesmo que esteja vazio, substituindo a opção de notificação (ifempty é o padrão). Include fileordirectory Lê o arquivo fornecido como um argumento como se fosse incluído inline onde a diretriz de inclusão aparece. Se um diretório for fornecido, a maioria dos arquivos desse diretório são lidos em ordem alfabética antes do processamento do arquivo incluído continuar. Os únicos arquivos que são ignorados são arquivos que não são arquivos regulares (como diretórios e pipes nomeados) e arquivos cujos nomes terminam com uma das extensões de tabu, conforme especificado pela diretiva tabooext. A diretiva de inclusão pode não aparecer dentro de uma definição de arquivo de log. Endereço de correio electrónico Quando um registro é roteado fora da existência, é enviado para endereço. Se nenhum e-mail deve ser gerado por um registro específico, a diretiva nomail pode ser usada. Mailfirst Ao usar o comando de e-mail, envie o arquivo apenas rodado, em vez do arquivo do próximo para expirar. Maillast Ao usar o comando de e-mail, envie o arquivo about-to-expire, em vez do arquivo apenas rodado (este é o padrão). Contagem maxilada Retire os registros girados mais antigos do que os dias ltcountgt. A idade só é verificada se o logfile for girado. Os arquivos são enviados para o endereço configurado se maillast e mail estiverem configurados. Tamanho mínimo Os arquivos de log são girados quando crescem maiores do que os bytes de tamanho, mas não antes do intervalo de tempo adicionalmente especificado (diariamente, semanalmente, mensalmente ou anualmente). A opção de tamanho relacionado é semelhante, exceto que é mutuamente exclusivo com as opções do intervalo de tempo e faz com que os arquivos de log sejam girados sem considerar o último tempo de rotação. Quando o minsize é usado, tanto o tamanho como o timestamp de um arquivo de log são considerados. Faltando Se o arquivo de log estiver faltando, vá para o próximo sem emitir uma mensagem de erro. Veja também nomissingok. Os arquivos de log mensais são girados na primeira vez que o logrotate é executado em um mês (este é normalmente no primeiro dia do mês). Nocompress Versões antigas de arquivos de log não são compactadas. Veja também a compressão. Nocopia Não copie o arquivo de log original e deixe-o no lugar. (Isso substitui a opção de cópia). Nocopytruncate Não trunca o arquivo de registro original no lugar depois de criar uma cópia (esta substitui a opção copytruncate). Nocreate Novos arquivos de log não são criados (esta substitui a opção create). Nodelaycompress Não adiar a compressão do arquivo de log anterior para o próximo ciclo de rotação (isso substitui a opção delaycompress). Nodateext Não arquive versões antigas de arquivos de log com extensão de data (isso substitui a opção dateext). Não envie arquivos de log antigos para qualquer endereço. Nomissingok Se um arquivo de log não existir, emita um erro. Este é o padrão. Noolddir Os logs são girados no mesmo diretório no qual o log normalmente reside (isso substitui a opção olddir). Nosharedscripts Execute os scripts prerotate e postrotate para cada arquivo de log que é girado (este é o padrão e substitui a opção sharedscripts). O caminho absoluto para o arquivo de log é passado como primeiro argumento para o script. Se os scripts sair com erro, as ações restantes não serão executadas apenas para o registro afetado. Noshred Não use shred ao excluir arquivos de log antigos. Veja também fragmento. Notificação não rote o log se estiver vazio (isso substitui a opção ifempty). Diretório do olddir Os logs são movidos para o diretório para rotação. O diretório deve estar no mesmo dispositivo físico que o arquivo de log que está sendo girado e é assumido como relativo ao diretório que contém o arquivo de log, a menos que um nome de caminho absoluto seja especificado. Quando esta opção é usada, todas as versões antigas do log terminam no diretório. Esta opção pode ser substituída pela opção noolddir. Thumb up thumb down As linhas entre postrotate e endscript (as quais devem aparecer em linhas por elas mesmas) são executadas (usando binsh) após o roteamento do arquivo de log. Essas diretivas só podem aparecer dentro de uma definição de arquivo de log. Normalmente, o caminho absoluto para o arquivo de log é passado como primeiro argumento para o script. Se existirem pastas de texto, todo o padrão é passado para o script. Veja também prerotate. Veja os documentos compartilhados e nosharedscripts para o tratamento de erros. Prerotate endscript As linhas entre prerotate e endscript (ambas devem aparecer em linhas por elas mesmas) são executadas (usando binsh) antes que o arquivo de log seja girado e somente se o log realmente for girado. Essas diretivas só podem aparecer dentro de uma definição de arquivo de log. Normalmente, o caminho absoluto para o arquivo de log é passado como primeiro argumento para o script. Se existirem pastas de texto, todo o padrão é passado para o script. Veja também postrotate. Veja os documentos compartilhados e nosharedscripts para o tratamento de erros. Primestation endscript As linhas entre firstaction e endscript (ambas as quais devem aparecer em linhas por elas mesmas) são executadas (usando binsh) uma vez antes de todos os arquivos de log que correspondem ao padrão curinga são girados, antes que o script prerotate seja executado e somente se pelo menos um log Será realmente rodado. Essas diretivas só podem aparecer dentro de uma definição de arquivo de log. Todo o padrão é passado para o script como primeiro argumento. Se o script sair com erro, nenhum processamento adicional será feito. Veja também a lestação. Lastaction endscript As linhas entre a fase de lastação e as extremidades (ambas as quais devem aparecer em linhas por elas mesmas) são executadas (usando binsh) uma vez que todos os arquivos de log que correspondem ao padrão curinga são girados, depois que o script postotate é executado e somente se pelo menos um log É girado. Essas diretivas só podem aparecer dentro de uma definição de arquivo de log. Todo o padrão é passado para o script como primeiro argumento. Se o script sair com erro, apenas uma mensagem de erro é mostrada (pois esta é a última ação). Veja também firstaction. Rotate count Os arquivos de log são tempos de contagem girada antes de serem removidos ou enviados para o endereço especificado em uma diretiva de correio. Se a contagem for 0, as versões antigas serão removidas em vez de giradas. Tamanho Os arquivos de log são girados somente se eles crescem maiores do que os bytes de tamanho. Se o tamanho for seguido por k. O tamanho é assumido em kilobytes. Se o M for usado, o tamanho é em megabytes, e se G for usado, o tamanho está em gigabytes. Então, tamanho 100. Tamanho 100k. Tamanho 100M e tamanho 100Gare tudo válido. Normalmente, os scripts prerotate e postrotate são executados para cada log que é girado e o caminho absoluto para o arquivo de log é passado como primeiro argumento para o script. Isso significa que um único script pode ser executado várias vezes para entradas de arquivo de log que combinam vários arquivos (como o exemplo varlognews). Se existirem pastas de texto, os scripts são executados apenas uma vez, independentemente de quantos logs correspondam ao padrão de caracteres curtos, e o padrão inteiro é passado para eles. No entanto, se nenhum dos logs no padrão requer rotação, os scripts não serão executados. Se os scripts sairem com erro, as ações restantes não serão executadas para nenhum registro. Esta opção substitui a opção nosharedscripts e implica a opção create. Deslize Exclua os arquivos de log usando shred - u em vez de unlink (). Isso deve garantir que os logs não sejam legíveis após a exclusão programada, isso está desativado por padrão. Veja também noshred. Contagem de shredcycles Sugere que o GNU shred (1) para descompassar os arquivos de loggem vezes antes da exclusão. Sem esta opção, o padrão de shred será usado. Contagem inicial Este é o número a ser utilizado como base para rotação. Por exemplo, se você especificar 0, os logs serão criados com uma extensão .0 como eles são girados a partir dos arquivos de log originais. Se você especificar 9, os arquivos de log serão criados com um .9, saltando 0-8. Os arquivos ainda serão girados o número de vezes especificado com a diretiva de contagem. Lista tabooext A lista atual de extensão tabu é alterada (consulte a diretriz include para obter informações sobre as extensões taboo). Se um preceder a lista de extensões, a lista de extensão de tabu atual é aumentada, caso contrário, ela será substituída. Na inicialização, a lista de extensão do tabu contém. rpmorig. Rpmsave. V. Swp. Rpmnew, cfsaved e. rhn-cfg-tmp-. Os arquivos de log semanais são girados se o dia da semana atual for inferior ao dia da semana da última rotação ou se mais de uma semana tiver passado desde a última rotação. Isso normalmente é o mesmo que rotear logs no primeiro dia da semana, mas funciona melhor se logrotate não for executado todas as noites. Os arquivos de log são girados se o ano atual não for o mesmo que a última rotação. Arquivo de estado padrão.
No comments:
Post a Comment