Pergunta

Existe uma maneira de registrar eventos de gravação log4j para um arquivo de log que também está sendo gravado por outras aplicações. As outras aplicações podem ser aplicações não-Java. Quais são as desvantagens? Bloqueio questões? Formatação?

Foi útil?

Solução

Log4j tem uma SocketAppender, que vai enviar eventos para um serviço que você pode implementar-se ou usar a implementação simples empacotado com Log4j.

Ele também suporta syslogd e log de eventos do Windows, que pode ser útil na tentativa de unificar a sua saída do log de eventos de aplicativos não-Java.

Se o desempenho é um problema em tudo, você quer um único serviço escrevendo o arquivo de log, em vez de tentar coordenar uma estratégia de bloqueio consistente entre os aplicativos de registro diferentes.

Outras dicas

Sua melhor aposta pode ser para permitir que cada log aplicativo separadamente, em seguida, colocar uma tarefa agendada no local para 'zipper' os arquivos juntos com base no tempo. Se você precisa realmente de acesso up-to-date com o log completo, você poderia ter esta corrida a cada hora.

Eu tenho uma experiência com as duas abordagens seguintes:

  1. Use banco de dados para o registo em vez de arquivo de texto simples - pode ser proibitivo por causa de problemas de desempenho, por outro lado, é muito fácil de analisar os logs, criar relatórios. Banco de dados cuida de todos os problemas de concorrência.
  2. A outra abordagem envolve o uso de servidor JBoss, que pode ser usado para ler informações de registro de outras fontes. JBoss pode ser executado na configuração mínima e graças ao que é realmente leve (2 segundos do tempo de inicialização). Detalhes podem ser encontrados aqui http://docs.jboss.org/process -guide / en / html / logging.html (Logging para um independentes Server). Log4J cuida de todas as questões de bloqueio / concorrência.

Se você não estiver planejando usar JBoss você pode usar a segunda abordagem como base de sua própria solução de log.

Eu não acho que as appenders log4j padrão fazer qualquer bloqueio de arquivos ou sincronização. Sem esse bloqueio, é provável que as mensagens de log perder ou recebê-los mutilado.

Eu não tenho certeza como é fácil fazer o bloqueio de arquivos em Java, mas para fazer este trabalho diretamente, eu acho que você precisa para subclasse o Appender apropriado e substituir o método de registro, envolvendo-o com o código de sincronização que fechaduras e desbloqueia o arquivo. Isso pode ter implicações de desempenho, dependendo da sua carga do sistema.

log4perl tem uma sincronização Appender, Log :: log4perl :: Appender :: Sincronizado, que envolve um Appender e faz isso, e também parece fornecer uma bandeira em seu Log :: log4perl :: Appender :: File que impede intercalados linhas. Você pode olhar para o que fazem para ver se ele poderia ser replicável em Java.

Log4j é suficiente flexível que você pode criar entradas de log em um formato que é compatível com os registros já no arquivo. Basta olhar para as appenders para saber como campos de dados formato específico.

A sua principal preocupação será com bloqueio, provavelmente por outras aplicações. Certifique-se de todas as aplicações não têm um bloqueio exclusivo sobre o arquivo e você deve ser fino.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top