Я пытаюсь перевести проект на стандарт .net, и это в основном библиотека классов. Я использую log4net для ведения журнала, и я использовал метод
public static ILog GetLogger(string name);
Поскольку на эту библиотеку ссылаются несколько проектов, определение репозитория не должно происходить, поскольку каждый проект, ссылающийся на этот, определяет свой собственный репозиторий для ведения журнала. Как я могу обойти эту проблему при переносе на стандарт .Net?
Реализация GetLogger
проста:
public static ILog GetLogger(string name)
{
return GetLogger(Assembly.GetCallingAssembly(), name);
}
Предполагая, что вы хотите использовать сборку вашей библиотеки классов, вы можете легко написать свой собственный вспомогательный метод:
private static ILog GetLogger(string name) =>
LogManager.GetLogger(typeof(SomeTypeInYourLibrary).Assembly, name);
По сути, сборка жестко запрограммирована как «сборка, содержащая указанный вами тип», что вы всегда получаете, вызывая GetLogger(string)
из своей библиотеки.
Хороший. Джон Скит снова доставляет удовольствие :)
Вероятно, вам следует использовать нет
ILog
. Вместо этого используйте интерфейсыMicrosoft.Extensions.Logging.Abstractions
и настройте их для использования log4net в качестве фактического регистратора. Вы не могу заставляете пользователей вашей библиотеки использовать Log4Net. Абстракции журналирования также стали стандартом де-факто, а это означает, что пакеты NuGet уже поддерживают их.