Pergunta

Eu acho que pode estar faltando o ponto de ter uma estrutura de log para a sua aplicação. Em todos os pequenos aplicativos que eu sempre escrevi uma pequena classe "Logging" e apenas passar mensagens de log para um método em que ela é gravada em um arquivo.

Qual é o propósito de um terceiro quadro de exploração madeireira partido como log4net? É thread-safe com registrando operações de gravação ou estou faltando alguma coisa?

Foi útil?

Solução

Essa é uma excelente pergunta.

A primeira razão é "por que não?" Se você estiver usando uma estrutura de log, então você vai colher os benefícios de manutenção do uso de algo já embalados.

A segunda razão é que a exploração madeireira é sutil. Diferentes tópicos, sessões, classes e instâncias de objetos podem entram em jogo na exploração madeireira, e você não quer ter que descobrir este problema fora na mosca.

A terceira razão é que você pode encontrar um gargalo de desempenho em seu código. Descobrir que seu código é lenta porque você está escrevendo para um arquivo sem buffer ou seu disco rígido está sem espaço em disco porque o logger não rollover e Compactar arquivos antigos podem ser uma dor no pescoço.

A quarta razão é que você pode querer anexar a syslog, ou gravar em um banco de dados ou a uma tomada, ou para arquivos diferentes. Frameworks ter essa funcionalidade incorporada.

Mas, realmente, a primeira resposta é o melhor; há muito pouco benefício para escrever o seu próprio, e um monte de inconvenientes.

Outras dicas

que você pode querer mudar para registrar em um db para alguma mensagem, ou um sistema de alerta que as páginas a pessoa pobre em apoio

Mais importante, porém, a maioria dos frameworks de registro permitem especificar o nível de log de diferentes classes para que você não necessidade de cortar um novo binário cada vez que você quer mais / menos logging (que detalhado log para o bug que você só viu em produção)

do Log4Net local tem mais detalhes

Em uma palavra: flexibilidade. Log4xxx dá-lhe a capacidade de fazer diferentes níveis de log, para registrar diferentes módulos de código para arquivos diferentes, e você pode depender de que seja a matéria não confiável que situação estranha que bata (qual será o seu logger fazer se o disco está fora do espaço ?)

Algo que os outros comentários ter omitido:. Se já existe uma biblioteca que faz o que quiser, você economiza ter que escrever o código

Possivelmente você está jogando semântica aqui: para mim, um "quadro de exploração madeireira" tipicamente é pouco mais do que uma classe que escreve as mensagens de log para um arquivo ... isso é o que você fez escrever a sua própria estrutura de log. Dado que você tiver feito isso, não é, obviamente, alguns ponto "usando uma estrutura Logging"!

Em última análise, você está indo para necessidade de se certificar de que trata o registo simultâneo corretamente (bloqueando o fluxo de saída), pode registrar em um arquivo, syslog, etc., pode fazer log rolando, e assim por diante. Você pode salvar-se de que o esforço usando alguém código de outra pessoa está bem testado.

Dependendo de como esperto sua própria implementação do sistema de registro é.

Em java, se você quiser tipos de log herdar, etc., pode ser muito incômodo e você preferir uma ferramenta de terceiros como o Log4J. Eu suponho que há coisas semelhantes para C #. Da mesma forma, se você quiser determinar o nível de log na linha de comando.

Se você quiser apenas para encaminhar todo o seu System.out e controle se eles são impressos sempre que você compilar seu próprio logger faria muito bem.

estruturas de Registro oferecem flexibilidade e impedi-lo de reinventar a roda. Eu sei que é simples morte cerebral para anexar a um arquivo em qualquer linguagem moderna, mas que o seu logger cultivado em casa tem vários alvos? você pode transformar o log on e off em tempo de execução? Por que arriscar um pneu furado quando estas rodas estão disponíveis gratuitamente?

Apenas para uma causa do argumento, por que não uma casa amadureceu crescido? que não vem de com qualquer bagagem extra e você tem controle completo sobre isso.

A maioria dos quadros de Registro tem muitos recursos que usamos realmente não vai a maioria deles e tendo dito que eles vem com lá própria bagagem (Seu apenas não uma classe, é um quadro). Por que não implementar um simples registro de cultivado em casa, onde todas as suas aplicações escrever lá registra a uma fila e um serviço fora de linha simples (pode ser um serviço de windows) ler a fila e grava-lo para o local desejado (File, banco de dados etc). Usando fila você pode conseguir assíncrona operação e há problemas de bloqueio.

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