Это объясняет его . Сводка: константа должна быть инициализирована во время объявления, только для чтения может быть инициализирован на конструкторе (и таким образом иметь различное значение в зависимости от используемого конструктора).
РЕДАКТИРОВАНИЕ: Посмотрите глюк Gishu выше для тонкого различия
Если вы хотите изменить поведение ведения журнала по умолчанию, просто создайте настраиваемый объект регистратора, который отвечает на все методы регистратора Rails:
Поскольку это , чтобы реализовать свой логгер, ваш ваша личная логика. Вы можете писать в базу данных, в стандартный вывод, когда захотите.
Затем замените регистратор по умолчанию для каждого базового класса, который вы хотите настроить.
ActiveRecord::Base.logger = YouLogger.new
Вы можете легко создать файл инициализатора с именем logger.rb и записать там все ваши нестандартные конфигурации. Таким образом, регистратор будет немедленно заменен при запуске Rails.
Я использую rails «регистратор исключений» , чтобы регистрировать все проблемы в моей базе данных, пока мой сайт находится в режим производства. Это даст вам красивый интерфейс, где вы сможете проверить наличие проблем. Если вы хотите видеть, что ваши посетители делают в реальном времени, взгляните на woopra
Крис,
Думаю, здесь важен комментарий Димы. Довольны ли вы (1) наличием журнала доступа в БД (в реальном времени) или (2) вас больше интересует ведение журнала Rails / приложения?
Для (1) с Apache (по крайней мере) вы можете войти в базу данных, используя ведение журнала по конвейеру.
http://httpd.apache.org/docs/1.3/logs.html#piped
Я написал программу, которая работает в фоновом режиме в ожидании ввода, который она анализирует и записывает в базу данных Postgres. Мой файл httpd.conf связан с этой программой с помощью директивы CustomLog.
Это относительно просто настроить и дает вам все очевидные преимущества возможности анализировать ваши журналы в базе данных. У меня это работает очень хорошо, особенно для отслеживания того, что делал пользователь непосредственно перед ошибкой. Однако вы должны защитить себя от внедрения sql, переполнения буфера, и другие проблемы безопасности в программе регистрации.
Что касается (2), я не являюсь разработчиком Rails, поэтому могу говорить только об общих подходах. Если вы хотите регистрировать переменные среды, данные приложения или очень выборочные биты информации, вы можете подумать о написании модуля веб-сервера. В зависимости от ваших конкретных потребностей, вы также можете обойтись некоторой комбинацией директив условного ведения журнала и фильтрации в программе ведения журнала.
На самом деле все сводится к тому, нужно ли вам решение для Rails или более общее решение для всего веб-сервера. решение.
Моя компания записывала некоторую структурированную информацию о трафике прямо в базу данных журналов MySQL. Эта база данных реплицируется ниже по потоку в другую базу данных. Вся аналитика выполняется после окончательной репликации базы данных. У нашего сайта довольно много трафика. Пока что никаких серьезных проблем нет. Однако у нашего ИТ-отдела есть некоторые растущие опасения относительно масштабируемости текущей настройки, и мы предлагаем выгрузить информацию журнала в «правильные» файлы журнала. Затем файлы журнала будут повторно вставлены обратно в те же таблицы базы данных нижестоящего уровня. Это подводит меня к этому вопросу. :)
Вот некоторые плюсы и минусы, которые я вижу в отношении файлов журналов и 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. Он обеспечивает возможность многоцелевого ведения журнала. Это действительно приятно.