2015-11-30 1 views
2

Скажем, у меня есть система Erlang, которая иногда идет противно и создает много предупреждений, которые будут записываться в файл, система должна по-прежнему функционировать должным образом, если ведение журнала не блокирует диск IO (т.е. журналы «более или менее ожидаются»). (Это сценарий реального мира, а не что-то, что я делаю)Erlang: error_logger и защита от перегрузки

error_logger поставляется с erlang, не имеет защиты от перегрузки, поэтому, если количество журналов действительно велико, регистрация будет блокировать диск IO и, возможно, неисправность.

Мой вопрос в том, почему error_logger по умолчанию не имеет защиты от перегрузки, потому что эта функция на самом деле не нужна, если вы правильно проектируете свою архитектуру? или это потому, что это какая-то расширенная функция, если вам нужна эта функция, вы должны использовать другую библиотеку, например lager?

ответ

1

Я бы сказал, что защита от перегрузки функции, и это вопрос реализации (и/или конфигураций).

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

Это не может быть исчерпывающим, но вещи, которые сразу приходят на ум, которые изменяются при входе требования являются:

  • приложений (некоторые приложения, очевидно, необходимо войти больше/меньше/по-другому, чем другие)
  • среды хоста (возможности например, для традиционного или хранилища SSD)
  • применение приложения (конечный пользователь или разработчик может развертывать с конфигурациями, которые означают более или менее протоколирование)
  • местная инфраструктура и стандарты (некоторые или ganisations может использовать только локальные журналы, но другие могут использовать системный журнал везде, религиозен)
  • внешних или 3-го экологических факторов партии (например, другой сетевой сервис, который разговаривает с прикладномом/узлом, вызывая протоколирование)

Это действительно важно отделить интерфейс каротаж от реализации, потому что:

  • разработчик может изменить свое мнение о реализации каротаж часть пути через проект, и разъединение означает, что это легко
  • системный администратор, возможно, потребуется изменить или переопределить разработчиков по умолчанию, из-за хозяина, прецеденте, местной инфраструктуры и других факторов окружающей среды, и т.д., некоторые из которых разработчик не может быть в состоянии предвидеть

Таким образом, поскольку это интерфейс, error_logger не имеет и не должен иметь защиту от перегрузки; это вне компетенции error_logger. Я свободно признаю, что возможно сделать правдоподобные аргументы для включения некоторой реализации в интерфейс, и я могу представить аргументы для включения таких функций, как защита от перегрузки в error_logger, несмотря на то, что я сказал, но это скользкий наклон , Вместо этого я бы выбрал чистоту и простоту; Я думаю, что стоит держать error_logger более точным и скупым, а не позволять в него заполнять дополнительный объем, который будет влиять на производительность каждой реализации ведения журнала во всем мире. Возьмите этот путь, и, прежде чем вы это узнаете, ограничения не будут блокироваться дисковым вводом-выводом, это будет сам error_logger, потому что он становится раздутым, и не будет ничего, что можно было бы сделать с ним, кроме создания новой ошибки вместо этого используется регистратор.

Смежные вопросы