Registro / rastreamento condicional em C #
Quero adicionar log ou rastreio ao meu aplicativo C #, mas não quero que a sobrecarga de formatar a string ou calcular valores seja registrada se o nível de verbosidade do log estiver definido tão baixo que a mensagem não será registrad
No C ++, você pode usar o pré-processador para definir macros que impedirão que o código seja executado da seguinte maneira:
#define VLOG(level,expr) if (level >= g_log.verbosity) { g_log.output << expr; }
Usado assim:
VLOG(5,"Expensive function call returns " << ExpensiveFunctionCall());
Como você faz isso em c #?
Li os documentos da Microsoft que explicam os recursos de rastreamento e depuraçãoAqu, e afirmam que o uso de #undef DEBUG e #undef TRACE remove todo o código de rastreamento e depuração do executável produzido, mas ele remove realmente toda a chamada? Ou seja, se eu escrever
System.Diagnostics.Trace.WriteLineIf(g_log.verbosity>=5,ExpensiveFunctionCall());
não chamará minha função cara se eu definir TRACE? Ou faz a ligação,entã decide que não vai rastrear nada?
De qualquer forma, mesmo que ele seja removido, isso é inferior à macro C ++ porque não posso fazer com que essa chamada feia seja parecida com a minha chamada simples VLOG () em C ++ e ainda evite avaliar parâmetros, posso? Também não posso evitar a sobrecarga definindo a verbosidade mais baixa no tempo de execução, como eu posso em C ++, cert