Чтобы получить ответ на конкретный вопрос (отключив использование log4net с помощью NHibernate), найдите код файл Logging.cs для NHibernate.Когда я посмотрел на него (само собой разумеется, я посмотрел на альфа-код версии 3.0, но сомневаюсь, что он сильно отличается от 2.x), в статическом конструкторе LoggerProvider он делегирует GetNHibernateLoggerClass, чтобы определить используемый класс.Если он не получает один, он использует класс, не основанный на операции.Поэтому, если вы заглянете в метод GetNHibernateLoggerClass, вы увидите, что сначала он ищет ключ appsettings, называемый «nhibernate-logger», который вы должны иметь возможность установить в «NHibernate.NoLoggingLoggerFactory, NHibernate».Вы также можете заметить, что при отсутствии определенного ключа он будет автоматически использовать log4net, если обнаружит DLL log4net в пути поиска (вероятно, это просто каталог, содержащий NHibernate DLL. Поэтому вы также можете попробовать удалить саму DLL log4net и посмотреть, что произойдет.Хотя первое решение является более явным, а второе - более логичным, поэтому я бы использовал первое.
В качестве примечания, это отличный пример того, почему открытый исходный код работает так хорошо.просто посмотрите исходный код, чтобы ответить на такой вопрос. В закрытом исходном коде вам придется либо обманывать и отражать код .NET (который может быть запутан), либо молиться, чтобы владельцы тщательно документировали такие непонятные моменты, как этот.
Кстати, этот же файл исходного кода предоставляет то, что нужно, если вы хотите взять сообщения журнала NHibernate и перенаправить их в свое собственное решение для ведения журнала, как вы уже упоминали (реализовать интерфейсы ILogger и ILoggerFactory и использовать конфигурациюустановка).