Журнал к базе данных вместо файлов журнала

Это объясняет его . Сводка: константа должна быть инициализирована во время объявления, только для чтения может быть инициализирован на конструкторе (и таким образом иметь различное значение в зависимости от используемого конструктора).

РЕДАКТИРОВАНИЕ: Посмотрите глюк Gishu выше для тонкого различия

63
задан sawa 6 May 2013 в 14:56
поделиться

4 ответа

Если вы хотите изменить поведение ведения журнала по умолчанию, просто создайте настраиваемый объект регистратора, который отвечает на все методы регистратора Rails:

  • add
  • debug, warn, error, info, фатальный, неизвестный

http://github.com/rails/rails/blob/9d7aae710384fb5f04129c35b86c5ea5fb9d83a9/activesupport/lib/active_support/buffered_logger.rb

Поскольку это , чтобы реализовать свой логгер, ваш ваша личная логика. Вы можете писать в базу данных, в стандартный вывод, когда захотите.

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

ActiveRecord::Base.logger = YouLogger.new

Вы можете легко создать файл инициализатора с именем logger.rb и записать там все ваши нестандартные конфигурации. Таким образом, регистратор будет немедленно заменен при запуске Rails.

9
ответ дан 24 November 2019 в 16:28
поделиться

Я использую rails «регистратор исключений» , чтобы регистрировать все проблемы в моей базе данных, пока мой сайт находится в режим производства. Это даст вам красивый интерфейс, где вы сможете проверить наличие проблем. Если вы хотите видеть, что ваши посетители делают в реальном времени, взгляните на woopra

3
ответ дан 24 November 2019 в 16:28
поделиться

Крис,

Думаю, здесь важен комментарий Димы. Довольны ли вы (1) наличием журнала доступа в БД (в реальном времени) или (2) вас больше интересует ведение журнала Rails / приложения?

Для (1) с Apache (по крайней мере) вы можете войти в базу данных, используя ведение журнала по конвейеру.

http://httpd.apache.org/docs/1.3/logs.html#piped

Я написал программу, которая работает в фоновом режиме в ожидании ввода, который она анализирует и записывает в базу данных Postgres. Мой файл httpd.conf связан с этой программой с помощью директивы CustomLog.

Это относительно просто настроить и дает вам все очевидные преимущества возможности анализировать ваши журналы в базе данных. У меня это работает очень хорошо, особенно для отслеживания того, что делал пользователь непосредственно перед ошибкой. Однако вы должны защитить себя от внедрения sql, переполнения буфера, и другие проблемы безопасности в программе регистрации.

Что касается (2), я не являюсь разработчиком Rails, поэтому могу говорить только об общих подходах. Если вы хотите регистрировать переменные среды, данные приложения или очень выборочные биты информации, вы можете подумать о написании модуля веб-сервера. В зависимости от ваших конкретных потребностей, вы также можете обойтись некоторой комбинацией директив условного ведения журнала и фильтрации в программе ведения журнала.

На самом деле все сводится к тому, нужно ли вам решение для Rails или более общее решение для всего веб-сервера. решение.

1
ответ дан 24 November 2019 в 16:28
поделиться

Моя компания записывала некоторую структурированную информацию о трафике прямо в базу данных журналов MySQL. Эта база данных реплицируется ниже по потоку в другую базу данных. Вся аналитика выполняется после окончательной репликации базы данных. У нашего сайта довольно много трафика. Пока что никаких серьезных проблем нет. Однако у нашего ИТ-отдела есть некоторые растущие опасения относительно масштабируемости текущей настройки, и мы предлагаем выгрузить информацию журнала в «правильные» файлы журнала. Затем файлы журнала будут повторно вставлены обратно в те же таблицы базы данных нижестоящего уровня. Это подводит меня к этому вопросу. :)

Вот некоторые плюсы и минусы, которые я вижу в отношении файлов журналов и log-db (реляционных):

  • файлы журналов быстрые, надежные и масштабируемые (по крайней мере, я слышал Yahoo! активно использует файлы журналов для анализа отслеживания кликов). Системный администратор может легко поддерживать
  • лог-файлы.
  • лог-файлы могут быть очень гибкими, так как в них можно записывать почти все.
  • log-файлы требуют тщательного анализа и потенциально упрощенного типа настройки для извлечения данных.
  • структуры log-db намного ближе к вашему приложению, что значительно сокращает время обработки некоторых функций. Это может быть благословение или проклятие. Вероятно, это проклятие в долгосрочной перспективе, поскольку вы, скорее всего, в конечном итоге получите сильно связанное приложение и аналитическую базу кода.
  • log-db может уменьшить шумы при ведении журнала и избыточность, поскольку файлы журнала вставляются только там, где это дает log-db у вас есть возможность делать обновления и связанные-вставки (нормализация, если вы смеете).
  • log-db может быть быстрым и масштабируемым, если вы идете с разделением базы данных и / или базами данных с несколькими журналами (воссоединение данных через нисходящие репликации)

Я думаю, что в моей ситуации необходимы некоторые стресс-тесты базы данных журналов. Таким образом, по крайней мере, я знаю, какой у меня запас.

Недавно я изучал некоторые базы данных на основе ключей и документов, такие как Redis, Tokyo Cabinet и MongoDB. Эти базы данных с быстрой вставкой потенциально могут быть лучшим выбором, поскольку они обеспечивают постоянство, высокую пропускную способность (запись) и возможности запросов в разной степени. Они могут сделать процесс извлечения данных намного проще, чем синтаксический анализ и сокращение карты с помощью гигабайт файлов журнала.

Я считаю, что в долгосрочной перспективе крайне важно иметь надежное хранилище аналитических данных. Освобождение данных приложения от аналитических данных и наоборот может стать большим выигрышем.


Наконец, я просто хотел бы отметить, что здесь, в StackOverflow, есть много похожих / тесно связанных вопросов на случай, если вы захотите расширить свое обсуждение.


Редактировать:

rsyslog выглядит очень интересно. Это дает вам возможность писать прямо в MySQL. Если вы используете Ruby, вам стоит взглянуть на гем logging. Он обеспечивает возможность многоцелевого ведения журнала. Это действительно приятно.


Редактировать:

rsyslog выглядит очень интересно. Это дает вам возможность писать прямо в MySQL. Если вы используете Ruby, вам стоит взглянуть на гем logging. Он обеспечивает возможность многоцелевого ведения журнала. Это действительно приятно.


Редактировать:

rsyslog выглядит очень интересно. Это дает вам возможность писать прямо в MySQL. Если вы используете Ruby, вам стоит взглянуть на гем logging. Он обеспечивает возможность многоцелевого ведения журнала. Это действительно приятно.

rsyslog выглядит очень интересно. Это дает вам возможность писать прямо в MySQL. Если вы используете Ruby, вам стоит взглянуть на гем logging. Он обеспечивает возможность многоцелевого ведения журнала. Это действительно приятно.

rsyslog выглядит очень интересно. Это дает вам возможность писать прямо в MySQL. Если вы используете Ruby, вам стоит взглянуть на гем logging. Он обеспечивает возможность многоцелевого ведения журнала. Это действительно приятно.

41
ответ дан 24 November 2019 в 16:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: