NHibernate имеет ILoggerFactory создать регистратор, определенный, как показано ниже:
public interface ILoggerFactory
{
IInternalLogger LoggerFor(string keyName);
IInternalLogger LoggerFor(System.Type type);
}
Интерфейс IInternalLogger
, что depites имя не является внутренним вообще, фактический интерфейс регистратора, что не удивительно карту точно ILog
интерфейс log4net
. Компания NH внутренне запрашивает фабрику лесозаготовок, когда ей необходимо зайти в журнал. Если никакой другой регистратор не настроен, а сборка log4net присутствует, фабрика возвращает обертку вокруг log4net. Если вы хотите предоставить свои собственные вам просто нужно обеспечить регистратор завода и настроить его как:
<appSettings>
<add key="nhibernate-logger"
value="MyLoggingLoggerFactory, MyLoggingAssembly"/>
</appSettings>
Как вы догадываетесь, класс MyLoggingLoggerFactory должен реализовать ILoggerFactory
. Разумеется, возвращаемые регистраторы должны реализовать IInternalLogger
, что, как сказано ранее, является общедоступным, даже если недопустимое имя может ввести в заблуждение. Это старт, который они используют, чтобы быть log4net
независимым. В качестве дополнения, если вам вообще не нужен журнал, просто удалите сборку log4net из каталога развертывания: NH будет изящно деградировать и использовать внутренне нулевой регистратор.
Как это достигается? Довольно уверен, что вам все еще нужен Log4Net, вам просто не нужно его регистрировать. –
Да, но именно то, что вы называете «не нужно», - это то, что я хочу понять. Если я скомпилирую проект с log4net и просто удалю dll позже, я не получу необязательный журнал, но сломанную часть программного обеспечения ... –
... следовательно, «вам все равно нужен Log4Net». Вы можете уменьшить количество журналов nhibernate в Log4Net, установив уровень в «FATAL» или некоторые из них в конфигурационном файле, но «log4net.dll» является зависимостью от NHibernate. –