Rails: записывайте данные в журналы приложений rails из любого класса ruby.

Я хочу иметь возможность записывать данные в журналы приложений Rail из класса ruby.

Я надеялся сделать logger.info "some stuff" из класса в my_app/app/myClass.rb, но он не определен. Когда я использую logger в своих контроллерах и в других местах, это работает.

Я немного новичок в Rails/Ruby, и я предполагаю, что это просто потому, что класс logger не включен в myClass.rb, но он автоматически включен во все контроллеры, модели и т. д.

Как я могу включить класс logger в произвольный класс ruby ​​или иным образом войти в мое приложение rails из класса ruby?

(Добавлен тег для «Pundit», поскольку специально я использую регистратор в файле политики Pundit, но это просто рубиновый класс: P)


person Don P    schedule 24.04.2014    source источник
comment
Я только что сделал это на днях, и это помогло мне. stackoverflow.com/questions/917566 /   -  person Eric    schedule 24.04.2014


Ответы (2)


Если вы хотите создать свой собственный регистратор:

class MyClass
  def initialize
     @app_logger = Logger.new("#{Rails.root}/log/app.log")
  end

  def othermethod
     @app_logger.info("anything here")
  end 
end 
person Lenin Raj Rajasekaran    schedule 24.04.2014
comment
Разве это не может быть использовано только в файлах, которые были загружены после контроллера приложений? - person Don P; 24.04.2014
comment
что ты имеешь в виду под не работает? какое сообщение об ошибке? - person Lenin Raj Rajasekaran; 24.04.2014
comment
NameError (неопределенная локальная переменная или метод app_logger' for #<MyClass:0x007fb4c60f6f18>). Which is the same error when logger` не определен. Опять же, я думаю, что это связано с тем, что этот класс загружается до application_controller, поэтому регистратор также недоступен - person Don P; 24.04.2014
comment
если вы собираетесь использовать логгер только в этом классе, инициализируйте app_logger в этом классе - person Lenin Raj Rajasekaran; 24.04.2014
comment
Спасибо за обновления. Теперь я больше не получаю сообщение об ошибке, но это все равно ничего не записывает в журналы приложений. - person Don P; 24.04.2014
comment
@app_logger = Logger.new("#{Rails.root}/log/app.log") и @app_logger.info('testing app logger') в моей инициализации - person Don P; 24.04.2014
comment
попробуйте создать пустой файл app.log в каталоге журнала - person Lenin Raj Rajasekaran; 24.04.2014

Вы можете загрузить регистратор приложения в метод Object во время процесса инициализации приложения rails.

# config/initializers/my_logger.rb

class Object
  def mylog
    @logger ||= Rails.logger
  end
end

Улучшение/изменение класса Object следует выполнять с осторожностью

person New Alexandria    schedule 24.04.2014