Както log4net, така и Logging Application Block са валидни избори. Мисля, че ELMAH се фокусира най-вече върху грешка регистриране, така че това вероятно не е (единственото нещо), което искате.
На работа използвам log4net в няколко проекта. Той е стабилен, производителен и разширяем и никога не сме имали проблеми с него.
Вероятно бих направил регистриране с log4net и също ще регистрирам изключения с ELMAH. Той може да регистрира необработени изключения ръчно и всяко изключение, което уловите и обработите във вашето приложение, може да бъде регистрирано с едно извикване на ELMAH. Това може да изглежда като двойно регистриране (и е :-)). Но е много ценно да имате регистрационния файл на ELMAH, когато нещо неочаквано се провали във вашето приложение.
Чух добри неща за проекта NLog , но аз не съм го използвал. Изглежда, че е малко по-сложен от log4net, но има допълнителното предимство да можете автоматично да добавяте контекстуална информация към регистрираните съобщения (малко като ELMAH).