В rails я хочу записать некоторую информацию в другой файл журнала, а не в стандартный файл development.log или production.log. Я хочу сделать эту запись из модельного класса.
источник
В rails я хочу записать некоторую информацию в другой файл журнала, а не в стандартный файл development.log или production.log. Я хочу сделать эту запись из модельного класса.
Вы можете создать объект Logger самостоятельно из любой модели. Просто передайте имя файла конструктору и используйте объект как обычный Rails logger
:
class User < ActiveRecord::Base
def my_logger
@@my_logger ||= Logger.new("#{Rails.root}/log/my.log")
end
def before_save
my_logger.info("Creating user with name #{self.name}")
end
end
Здесь я использовал атрибут класса, чтобы запоминать регистратор. Таким образом, он не будет создан для каждого отдельного объекта User, который создается, но вы не обязаны это делать. Помните также, что вы можете внедрить my_logger
метод непосредственно в ActiveRecord::Base
класс (или в какой-то собственный суперкласс, если вам не нравится слишком много патчить обезьяны), чтобы поделиться кодом между моделями вашего приложения.
User.logger = Logger.new(STDOUT)
или куда вы хотите войти. Таким же образомActiveRecord::Base.logger = Logger.new(STDOUT)
будут меняться все журналы для всех моделей.User.logger = Logger.new(STDOUT)
поменял все логи для всех моделей. Ну, это изменилосьActiveRecord::Base.logger
my_logger
вapplication_controller.rb
.Обновить
Я сделал драгоценный камень, основанный на решении ниже, названный multi_logger . Просто сделайте это в инициализаторе:
и позвонить
и вы сделали.
Если вы хотите написать код самостоятельно, см. Ниже:
Более полное решение было бы разместить следующее в вашем каталоге
lib/
илиconfig/initializers/
.Преимущество заключается в том, что вы можете настроить форматирование так, чтобы оно автоматически добавляло метки времени или серьезность в журналы. Это доступно из любой точки Rails и выглядит более аккуратно, если использовать шаблон синглтона.
источник
#{$$}
?Приличный вариант, который мне подходит, это просто добавить довольно простой класс в вашу
app/models
папку, такой какapp/models/my_log.rb
затем в вашем контроллере, или практически в любом месте, где вы можете ссылаться на класс модели из вашего приложения rails, то есть где бы вы
Post.create(:title => "Hello world", :contents => "Lorum ipsum");
ни делали или что-то подобное, вы можете войти в свой пользовательский файл, например такисточник
Определите класс логгера в (скажем) app / models / special_log.rb:
инициализировать регистратор в (скажем) config / initializers / special_log.rb:
В любом месте вашего приложения вы можете войти с помощью:
источник
Вот мой пользовательский логгер:
источник
источник
Я бы предложил использовать Gem Log4r для пользовательских журналов. Цитирую описание со своей страницы:
источник
источник
Фреймворк Logging, с его обманчиво простым именем, обладает утонченностью, которой вы жаждете!
Следуйте очень коротким инструкциям рельсов регистрации, чтобы начать отфильтровывать шум, получать оповещения и выбирать выходные данные детальным и высокоуровневым способом.
По окончании погладьте себя по спине. Бревно, ежедневно. Стоит только этого.
источник