rails 4 log4r server.rb:78: в `start': неопределенный метод`formatter'

Я слишком долго изучал эту тему, поэтому я должен опубликовать это. У меня есть несколько приложений, выполняющих эту настройку, и одно из них полностью тормозит запуск rails (rails s). Они оба настроены практически одинаково, но я не могу найти иголку в стоге сена здесь. У кого-нибудь есть указания, как найти эту проблему?

Настройка основана на: http://blog.mmlac.com/log4r-for-rails/comment-page-1/

когда я пытаюсь запустить рельсы с:

=> Booting WEBrick
=> Rails 4.0.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
/Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:78:in `start': undefined method `formatter' for #<Log4r::Logger:0x007f85be89abe8> (NoMethodError)
    from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:78:in `block in <top (required)>'
    from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
    from /Users/chrishough/Placewise/code/ApiDigest/.bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

как я настроил log4r в моем файле application.rb:

#log4r requirements
require 'log4r'
require 'log4r/yamlconfigurator'
require 'log4r/outputter/datefileoutputter'
include Log4r

module DigestApi
  class Application < Rails::Application
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.

   # -----------------------------------------------------------------------------------
    # assign log4r's logger as rails' logger.
    log4r_config= YAML.load_file(File.join(File.dirname(__FILE__),"log4r.yml"))
    log_cfg = YamlConfigurator
    log_cfg["ENV"] = Rails.env 
    log_cfg.decode_yaml(log4r_config['log4r_config'])

    # # disable standard Rails logging
    config.logger = Log4r::Logger['rails']
    ActiveRecord::Base.logger = Log4r::Logger['sqlserver']

    # #nice for multiple-instance webservers like unicorn
    # #to monitor (re-)starts
    # #log whenever a worker (re-)started
    Log4r::Logger['rails'].info "LAUNCH PUMA WORKER"
    # -----------------------------------------------------------------------------------

Мой файл log4r.yml:

log4r_config:
  # define all loggers:
  loggers:
    - name          : rails
      level         : DEBUG
      trace         : 'true'
      outputters    :
      - console
      - rails_file

    - name          : sqlserver
      level         : DEBUG
      trace         : 'false'
      outputters    :
      - sqlserver_file

    - name          : sqlserver_long_query
      level         : DEBUG
      trace         : 'false'
      outputters    :
      - sqlserver_long_query_file

    - name          : missing_route
      level         : DEBUG
      trace         : 'false'
      outputters    :
      - missing_route_file

  # define all outputters (incl. formatters)
  outputters:
  - type: StdoutOutputter
    name: console
    formatter:
      date_pattern: '%H:%M:%S'
      pattern     : '%d %l: %m'
      type        : PatternFormatter

  - type: FileOutputter
    name: rails_file
    filename: "log/#{ENV}.log"
    trunc: false
    formatter:
      date_pattern: '%Y %m %d %H:%M:%S.%L %z'
      pattern     : '%d %l: %m'
      type        : PatternFormatter

  - type: FileOutputter
    name: sqlserver_file
    filename: "log/sql.log"
    trunc: false
    formatter:
      date_pattern: '%Y %m %d %H:%M:%S.%L %z'
      pattern     : '%d %l: %m'
      type        : PatternFormatter

  - type: FileOutputter
    name: sqlserver_long_query_file
    filename: "log/sql_qry_long.log"
    trunc: false
    formatter:
      date_pattern: '%Y %m %d %H:%M:%S.%L %z'
      pattern     : '%d %l: %m'
      type        : PatternFormatter

  - type: FileOutputter
    name: missing_route_file
    filename: "log/missing_route.log"
    trunc: false
    formatter:
      date_pattern: '%Y %m %d %H:%M:%S.%L %z'
      pattern     : '%d %l: %m'
      type        : PatternFormatter

3 ответа

Решение

Глядя на этот пост [1], вам, возможно, придется импортировать и FileOutputter. Не совсем уверен.

Я думаю, что это проблема импорта, когда другой сервер работает нормально. Просто попробуйте импортировать все, что вы можете использовать из Log4r, и убедитесь, что вы не вызываете в [1] упомянутые функции непосредственно в регистраторе где-то еще.

Если это не сработает, попробуйте настроить простой регистратор программно, затем переместите этот регистратор в.yml, а затем разверните его туда, где он был раньше.

Надеюсь, это поможет вам, дайте мне знать, если вам нужна дополнительная помощь

[1] Неопределенный метод Formatter для Log4r в RAILS 4.0

Я столкнулся с той же проблемой, поэтому я создал инициализатор для расширения log4r с помощью метода пустого форматера. Просто создайте файл с именем log_formatting.rb в инициализаторах и вставьте в него следующее:

class Log4r::Logger
  def formatter()
  end
end

Это сработало для меня. Я надеюсь, что это помогает.

Другим возможным может быть увидеть ваш environment.rb файл, если вы случайно прокомментировали / удалили следующие строки.

require_relative 'application'
Rails.application.initialize!
Другие вопросы по тегам