Есть ли фасад журналирования для мира .NET?

Я новичок в стеке .NET, и мне было интересно, есть ли эквивалент slf4j для. NET платформы. Для меня логин на фасаде и возможность менять реализации логирования по мере необходимости просто имеет смысл. Кроме того, API-интерфейсы оболочки, доступные в slf4j, спасали меня много раз, когда мне приходилось использовать стороннюю библиотеку, которая была написана для единой платформы ведения журналов, которую я не использовал.

Есть ли проект, который действует как фасад между регистраторами, такими как log4net, nLog и Enterprise Library? Существуют ли оболочки, которые позволяют мне сокращать вызовы этих библиотек и направлять их в другую библиотеку? Должен ли я начать проект с открытым исходным кодом, чтобы сделать это самому? Этот вопрос повторяется, потому что я не знаю, как правильно задать? И наоборот, является ли распространенный способ сделать это с помощью аспектно-ориентированного программирования?


person Elijah    schedule 28.04.2010    source источник
comment
Хороший вопрос - у меня тоже такая проблема. Мне потребовалось всего несколько минут, чтобы реализовать интерфейс ILog и реализацию моего любимого nLog. Создадим проект ОС - присоединюсь :)   -  person twk    schedule 29.04.2010
comment
Уже сделано. См. Ниже ссылку на общее ведение журнала для .NET.   -  person Tom Cabanski    schedule 29.04.2010
comment
Также существует SLF для .NET: slf.codeplex.com, основанный на slf4j.   -  person Steven    schedule 29.04.2010
comment
Стивен, ты должен дать ответ на вопрос.   -  person Elijah    schedule 29.04.2010
comment
Microsoft.Extensions.Logging как часть ASP.NET Core, которая имеет несколько интерфейсов, которые можно реализовать. для установленных фреймворков ведения журнала, например, существуют Serilog.Extensions.Logging, NLog.Extensions.Logging и т. д. Я не пробовал, поэтому не знаю, есть ли какие-либо проблемы с их использованием вне контекста ASP.NET. Если нет, я вижу, что он становится фактическим фасадом журналирования для .NET.   -  person nawfal    schedule 24.03.2016


Ответы (7)


Извините, я использовал эту штуку и забыл, что это не версия Apache. На самом деле это открытый исходный код и часть проекта, называемого общей инфраструктурой. Это также называется общим ведением журнала. Работает с MS Enterprise, log4net и другими. Это работает хорошо.

person Tom Cabanski    schedule 28.04.2010
comment
Да, Common Logging - это фасад ведения журнала для .NET. - person Steven; 29.04.2010
comment
@ Стивен: Верно, но, к сожалению, он настолько устарел. - person abatishchev; 31.10.2011
comment
Я бы даже посоветовал не использовать фасады из рубки. Правильная инъекция зависимостей исключает использование какого-либо фасада журналирования. - person Steven; 31.10.2011
comment
@abatishchev: Несмотря на это, после просмотра исходного кода это выглядит как довольно хорошо спроектированная библиотека. Есть много хороших функций, таких как FormatMessageCallback. Я собираюсь опробовать его, и если это сработает для нас, я буду добавлять обновления там, где это необходимо. - person aaronc; 13.01.2012
comment
@abatishchev: 2.1.1 была выпущена 9 июня 2012 года. - person Lee Chee Kiam; 28.08.2012
comment
@Steven, вам по-прежнему нужен API журналирования откуда-то. - person Thorbjørn Ravn Andersen; 04.10.2012
comment
@ ThorbjørnRavnAndersen: Что ж, вам нужно где-то войти, но вы не должны (и не должны) ссылаться на него нигде, кроме вашего Корень композиции. Также ознакомьтесь с этим ответом, в котором говорится о минимизации необходимости ведения журнала. - person Steven; 04.10.2012
comment
Вам по-прежнему нужен API для использования в вашей программе, независимо от того, как вы получаете фактический регистратор. В дополнение к этому идея без журнала - это хорошо, но вы должны быть осторожны - минималистичные журналы, как правило, менее полезны в судебной экспертизе. - person Thorbjørn Ravn Andersen; 04.10.2012
comment
@ ThorbjørnRavnAndersen: Я не говорю, что вы не должны регистрироваться, но я говорю, что в вашей общей базе кода должно быть всего несколько строк, которые фактически записывают в журнал. Конечно, это зависит от требований вашего приложения, но когда вы используете команды для выполнения любой бизнес-логики в целях безопасности, вы может просто зарегистрировать всю команду, и при этом у вас обычно будет вся необходимая информация, даже для криминалистического анализа. Добавьте источник событий, и вы всегда будете иметь полную картину того, что происходило в каждый момент времени. - person Steven; 04.10.2012
comment
@ ThorbjørnRavnAndersen: Я стараюсь определить свой собственный ILogger интерфейс и реализовать адаптер для использования инфраструктуры ведения журнала (см. здесь). Это избавляет мое приложение от любых ссылок на структуру ведения журнала. Другими словами: создайте свой собственный API. - person Steven; 04.10.2012
comment
@ Стивен рад, что вы нашли процедуру, которая вам подходит. Я лично обнаружил, что возможность стоять на плечах других - это преимущество для нас, поэтому я обычно полагаюсь на компонент регистрации. slf4j отлично подходит для общего API для тех. - person Thorbjørn Ravn Andersen; 04.10.2012
comment
Моя команда дала мне повод не использовать фасад: вы не знаете, могут ли / когда они могут изменить api. У нас есть проекты, которые включаются в другие проекты, поэтому, если они что-то изменят, мы можем получить разные версии, которые не будут совместимы. - person BluE; 15.02.2019

Взгляните на Logging Facility в замке Виндзор.

Базовый код находится здесь. Адаптер Log4net здесь. Адаптер NLog здесь.

Добавлен адаптер для Serilog.

Без адаптеров есть поддержка ConsoleLogger, DiagnosticsLogger, StreamLogger и NullLogger.

Довольно легко написать адаптеры для любой другой платформы ведения журналов.

person Mauricio Scheffer    schedule 28.04.2010
comment
Castle.Services.Logging вроде бы исчез. Получение 404 - person Sam7; 27.09.2012
comment
@ Sam7 нет, просто ссылки поменяли. Всякий раз, когда вы найдете что-то подобное, подумайте о поиске новых ссылок в Google (как я только что сделал), а затем отправьте предложение к ответу. Спасибо! - person Mauricio Scheffer; 27.09.2012

Я использую Simple Logging Facade, потому что похоже, он поддерживает Object Guy's Logging Framework для .Net из коробки.

person quentin-starin    schedule 06.05.2010

Обновление для .NET Core:

  • LibLog - https://github.com/damianh/LibLog - встроенный фасад журналирования, пакет nuget с исходным кодом который встроен в ваш проект. Автоматически обнаруживает и использует NLog, log4net, Serilog, LoupeLog

  • Microsoft: Microsoft.Extensions.Logging.Abstractions - https://github.com/aspnet/Logging. .NETCore поддерживается

  • Общее ведение журнала - https://github.com/net-commons/common-logging . .NETCore поддерживается с 3.4.1, не находится в активной разработке

person shatl    schedule 06.06.2017

У меня такая же проблема. Пройдя по рекомендациям выше, я обнаружил Ninject.Extensions.Logging

Это здорово, поскольку фасад в любом случае имеет смысл в сочетании с DI.

Он поставляется с прокси для NLog, NLog2 и log4net.

Вот хороший пример того, как использовать его в сочетании с NLog: http://blog.tonysneed.com/2011/10/09/using-nlog-with-dependency-injection/

Я понимаю, что этому вопросу уже несколько лет, но из-за полноты для других пользователей я все же решил опубликовать это «Решение»

person Sam7    schedule 27.09.2012

С тех пор, как это было написано, появилась еще одна интересная оболочка журналирования под названием Fody.Anotar. На сегодняшний день это, наверное, самый полный из них. Большинство других, кроме Logging Faciliy, довольно устарели и поддерживают только самые старые регистраторы.

Он имеет адаптеры для NLog, Log4Net, Serilog, CommongLogging, Catel, LibLog, MetroLog, NServiceBus и Splat и позволяет создавать адаптер для вашей собственной библиотеки.

Вы можете использовать Nuget для его установки. Ищите пакеты Anotar. *. Fody, например Anotar.NLog.Fody.

person JotaBe    schedule 15.06.2015
comment
Адаптер для Common.Logging? Я предполагаю, что это сам фасад. - person nawfal; 24.03.2016
comment
@nawfal Да, вы правы, но держу пари, что это не первый раз, когда вы видите слой абстракции, построенный на другом уровне абстракции (и так далее, и тому подобное). Это то же самое, что и логин библиотеки логгера в другую библиотеку логирования, например, запись Serilog в NLog или Log4Net или запись NLog в ELMAH. Вопрос должен быть в том, имеет ли это смысл или нет. - person JotaBe; 28.03.2016

Я почему-то нашел здесь все решения неудовлетворительными, особенно для библиотек / API. Хотя я никогда не думал, что буду, я на самом деле написал «регистратор» с открытым исходным кодом, который должен справиться с большинством проблем.

Возможно, вам стоит взглянуть на Dapplo.Log, вы можете получить его из NuGet.

Идея состоит в том, чтобы использовать Dapplo.Log в вашей библиотеке, и проект, который его использует, может направить (при необходимости) любой вывод журнала в выбранный им регистратор. Примеры направления вывода можно найти в тестах с реализациями некоторых основных фреймворков здесь.

Это, вероятно, не идеально (пока), и я приветствую пул-реквесты или билеты.

person Robin Krom    schedule 11.04.2017