Pergunta

Eu estou fazendo a minha mudança de codificação em C ++ para C #. Eu preciso substituir o meu C ++ registro de erros / sistema de comunicação macro com algo semelhante em C #.

Na minha C ++ fonte eu posso escrever

LOGERR ( "Algum erro"); ou LOGERR ( "erro com entradas% s e% d", stringvar, IntVar);

A macro e apoiando o código da biblioteca, em seguida, passa a mensagem (possivelmente varargs) formatado em um banco de dados juntamente com o arquivo de origem, linha de origem, nome de usuário e tempo. Os mesmos dados também é recheado em uma estrutura de dados para relatar mais tarde para o usuário.

Alguém tem C trechos # código ou ponteiros para exemplos que fazem isso básica relatório de erros / logging?

Editar: Na época, eu fiz esta pergunta eu era realmente novo para .NET e não tinha conhecimento de System.Diagnostics.Trace. System.Diagnostics.Trace era o que eu precisava naquele momento. Desde então, tenho usado log4net em projetos em que os requisitos de registo eram maiores e mais complexas. Apenas edição que 500 linha de arquivo de configuração XML e log4net vai fazer tudo o que você vai precisar de:)

Foi útil?

Solução

Muita log4net defende aqui, então eu tenho certeza que isso vai ser ignorado, mas vou acrescentar a minha própria preferência:

System.Diagnostics.Trace

Isto inclui ouvintes que escutam para os seus métodos Trace(), e depois gravar em um log janela de arquivo de log / saída / evento, os do quadro que estão incluídos são DefaultTraceListener, TextWriterTraceListener eo EventLogTraceListener. Ele permite que você especifique os níveis (Aviso, Erro, Info) e categorias.

classe Traço na MSDN
escrita no log de eventos em um web Application
UdpTraceListener - write log4net mensagens XML compatível a um visualizador de log tais como log2console

Outras dicas

Eu recomendo olhando para Log4net . Este pós cobre a maioria do que você precisa para começar começado.

Outra boa biblioteca logging é NLog , que pode registrar em um monte de lugares diferentes, tais como arquivos, bases de dados, evento logger etc.

Eu uso O objeto Logging Framework --como de Guy fazer a maioria das pessoas que tentam fazer isso. Esse cara tem algum interessante comentários sobre isso.

Enterprise Library é uma alternativa sólida para log4net e oferece um monte de outras capacidades, bem como (caching, tratamento de exceções, validação, etc ...). Eu usá-lo em quase todos os compilação do projeto I.

Altamente recomendado.

Mesmo que eu pessoalmente detesto isso, log4net parece ser o padrão de fato para C logging #. Exemplo de uso:

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);

Como eu disse em outro segmento, temos vindo a utilizar O objeto Logging de Guy Framework em múltiplos aplicativos de produção por vários anos. É super fácil de usar e estender.

Log4Net é uma estrutura de log bastante abrangente que permitirá que você faça o login para diferentes níveis (Debug , Erro fatal) e saída estas declarações de log para lugares pode ser diferente (arquivo rolando, serviço web, erros de janelas)

Eu sou capaz de entrar facilmente em qualquer lugar através da criação de uma instância do logger

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));

e, em seguida, registrar o erro.

_log.Error("Error messsage", ex);

Serilog é tarde para a festa aqui, mas traz algumas opções interessantes para a mesa. Ele se parece muito com madeireiros baseados em texto clássicos de uso:

Log.Information("Hello, {0}", username);

Mas, ao contrário de estruturas anteriores, só torna a mensagem e argumentos em uma corda ao escrever texto, por exemplo, para um arquivo ou para o console.

A idéia é que se você estiver usando um 'armazenamento de dados NoSQL' de estilo para os logs, você pode gravar eventos como:

{
    Timestamp: "2014-02-....",
    Message: "Hello, nblumhardt",
    Properties:
    {
        "0": "nblumhardt"
    }
}

A sintaxe string de formato .NET é estendido para que você possa escrever o exemplo acima, como:

Log.Information("Hello, {Name}", username);

Neste caso, o imóvel será chamado Name (em vez de 0), tornando a consulta e correlação mais fácil.

Já existem algumas opções boas para armazenamento. MongoDB e Armazenamento Tabela Azure parecem ser bastante popular para DIY. I originalmente construído Serilog (embora seja um projeto da comunidade) e eu estou trabalhando agora em um produto chamado Seq , que fornece armazenamento e consulta desses tipos de eventos de log estruturados.

Você pode usar construído no registro de .NET. Olhe em TraceSource e TraceListeners, eles podem ser configurados no arquivo config.

O mesmo vale para log4net. Eu estou adicionando meus dois bits porque para uso real, não faz sentido olhar para algumas implementações de código aberto para ver exemplos de código do mundo real com algumas adições úteis. Para log4net, eu sugiro fora do topo da minha cabeça olhando para subtexto . Particularmente dar uma olhada no início do aplicativo e AssemblyInfo pedaços.

Na sequência do par de comentários seconsiderando ao uso dos métodos System.Diagnostics para extração de madeira, eu também gostaria de salientar que o ferramenta DebugView é muito puro para verificar a saída de depuração quando necessário - a menos que você precisar, não há necessidade para os aplicativos para produzir um arquivo de log, você só lançamento DebugView como e quando necessário.

O construído em rastreamento em System.Diagnostics é bom no .NET Framework e eu usá-lo em muitas aplicações. No entanto, uma das principais razões que eu ainda usar log4net é que o construído em rastreamento .NET Framework não tem muitas das appenders caracterizado cheio úteis que log4net já fornece construído em.

Por exemplo, há realmente não é uma boa rolando arquivo ouvinte de rastreamento definido no .NET Framework diferente daquele em VB.NET dll que realmente não é tudo o que cheio de recursos.

Dependendo do seu ambiente de desenvolvimento Eu recomendaria usar log4net menos ferramentas 3rd party não estão disponíveis, então eu diria que usar os System.Diagnostics rastreamento classes. Se você realmente precisa de um melhor appender / TraceListener você sempre pode implementá-lo.

Por exemplo, muitos dos nossos clientes exigem que nós não usar bibliotecas de código aberto quando instalado em suas máquinas corporativas, então, nesse caso, as classes de rastreamento .NET Framework são um ajuste perfeito.

Além disso - http://www.postsharp.org/ é uma biblioteca de AOP Eu estou olhando em que podem também auxiliar na registrando como demonstrado aqui no projeto de código: http: // www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx .

sem exceções é um dos o pacote NuGet mais fácil disponível para usar para o registo. Seu um código aberto . Ele automaticamente se encarrega de exceção não tratada, e as opções para manualmente registros estão disponíveis . Você pode fazer logon ou em linha acolhimento auto no servidor local.

Log4Net, como já foi dito, é bastante comum e semelhante ao Log4j que irá ajudá-lo se você nunca fazer qualquer Java.

Você também tem a opção de usar o Logging Application Block http: // www. codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx

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