Squeak.ru - шаблоны программирования

Как проверить, отключен/включен ли аппендер

Можно ли определить, отключен ли аппендер (т.е. <level value="Off">)?

Я хотел бы иметь глобальный флаг, который определяет, включен ли мой аппендер:

public static bool isAppenderEnabled = /*...*/;

Если приложение включено, я бы записал материал:

if(isAppenderEnabled)
{
    MyAppender.Warn("****************************************");
    MyAppender.Warn("Warning title!");
    MyAppender.Warn(String.Format("Some warning message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3));
    MyAppender.Warn("****************************************");
}

Важно иметь флаг isAppenderEnabled, потому что я бы сэкономил много процессорного времени, когда добавление отключено из-за того, что я не строю все эти строки. Какой лучший/самый простой способ проверить, отключен ли аппендер?

P.S. Я пробовал MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Off);, однако, если я устанавливаю уровень журнала на Warn, он всегда возвращает true для Off (в основном, он всегда говорит, что регистратор отключен), так что это не работает.

05.09.2012

  • [может быть полезно для вас, так как это проверенный ответ на ваш похожий вопрос] [1] [1]: stackoverflow.com/a/ 10126517/1003016 06.09.2012

Ответы:


1

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

if (MyAppender.IsWarnEnabled)
{
    MyAppender.Warn(String.Format("Some warning message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3));
}

...

if (MyAppender.IsDebugEnabled)
{
    MyAppender.Debug(String.Format("Some debug info! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3));
}

...

if (MyAppender.IsErrorsEnabled)
{
    MyAppender.Error(String.Format("Some error message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3));
}

Преимущество этого метода заключается в том, что вы можете установить и оставить для ведения журнала значение Level.Error или Level.Fatal, не создавая все строки в предупреждениях/отладке и информационных сообщениях.

Сказав это, это ваш выбор. Чтобы ответить на ваш вопрос, причина, по которой MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Off); не работает, заключается в том, что MyAppender.Logger.IsEnabledFor(x) вернет true, если уровень установлен на x или выше. Следовательно, я ожидаю, что этот вызов всегда будет возвращать true.

Следующий уровень выше (насколько мне известно) log4net.Core.Level.Emergency, поэтому можно проверить его, но, поскольку этот уровень обычно не используется, вы также можете проверить log4net.Core.Level.Fatal

MyAppender.IsFatalEnabled - это просто оболочка свойства для MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Fatal) ,

06.09.2012

2

Основываясь на моем понимании log4j, на котором основан log4net, вы можете проверить, настроен ли LOGGER для интересующего вас уровня, позвонив:

logger.isEnabledFor(Priority.WARN)  // or whatever log priority you want

Нет ничего, что говорило бы о том, включен ли аппендер. Однако вы МОЖЕТЕ проверить, назначен ли данный именованный аппендер вашему регистратору. Вы бы проверили:

if(logger.getAppender("MyAppender") == null)
05.09.2012
  • Я пробовал IsEnabledFor, но это ограничивает и не очень надежно, когда мы имеем дело с несколькими уровнями журнала. 06.09.2012
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...