Ambos log4net e Logging Application Block são escolhas válidas. Acho que o ELMAH está mais focado em erro log, então provavelmente não é (a única coisa) que você deseja.
No trabalho, uso o log4net em alguns projetos. É estável, de alto desempenho e extensível, e nunca tivemos problemas com isso.
Eu provavelmente faria log com log4net e log de exceções com ELMAH também. Ele pode registrar exceções não tratadas manualmente, e qualquer exceção que você capturar e manipular em seu aplicativo pode ser registrada com uma única chamada para o ELMAH. Isso pode parecer um registro duplo (e é :-)). Mas é muito valioso ter o log ELMAH quando algo inesperado falha em seu aplicativo.
Ouvi falar bem do projeto NLog , mas não usei eu mesmo. Parece ser um pouco mais complexo que o log4net, mas tem o benefício adicional de poder adicionar informações contextuais às mensagens de log automaticamente (um pouco como o ELMAH).