Добавить идентификатор сессии в каждый журнал в Rails - PullRequest
3 голосов
/ 06 марта 2012

Есть ли способ добавить идентификатор сеанса в каждый журнал в Rails.

Теперь я добавил это в моей среде. Rb:

class Logger
  def format_message(severity, timestamp, progname, msg)
    "#{timestamp.to_formatted_s(:db)} #{severity} #{msg}\n" 
  end 
end

Прежде всего,это лучшая практика?И как мне добавить идентификатор сессии?

Ответы [ 4 ]

6 голосов
/ 23 мая 2012

К сожалению, предоставление :session_id для log_tags пока не работает (по состоянию на 23 мая 2012 г.), поскольку в промежуточном программном обеспечении Rack отсутствует идентификатор_ сессии.

Поскольку массив log_tags принимает объект Proc, а объект proc вызывается с объектом запроса, я мог бы настроить log_tags следующим образом:

config.log_tags = [ :uuid, :remote_ip,
                    lambda {|req| "#{req.cookie_jar["_session_id"]}" } ]

Работает с Rails 3.2.3, используется хранилище сессий ActiveRecord.

3 голосов
/ 06 марта 2012

при работе с rails 3.2 вы можете использовать теги журнала:

Обновление промежуточного программного обеспечения Rails :: Rack :: Logger для применения любых тегов, установленных в config.log_tags, к новому ActiveSupport :: TaggedLoggingRails.logger.Это позволяет легко помечать строки журнала отладочной информацией, такой как поддомен и идентификатор запроса, - оба очень полезны при отладке многопользовательских рабочих приложений DHH

, если повезет, добавление этого в вашу среду может работать:

config.log_tags = [:uuid, :remote_ip, :session_id]

ОБНОВЛЕНИЕ

для неудачников, решение на основе ответа @ shigeya.

к сожалению, rails НЕ обеспечивает доступ к вашему sessionid в здравом умеманера.вы всегда должны полагаться на то, что делает стойка во внутреннем устройстве ... доступ к cookie_jar с помощью ключа cookie - это «рекомендуемый» способ сделать это.

это то, что я использую для своего приложения:

config.log_tags = [
  :host,
  :remote_ip,
  lambda { |request| "#{request.uuid}"[0..15] },
  lambda { |request| "#{request.cookie_jar["_session_id"]}"[0..15] },
]

вывод выглядит следующим образом:

[hamburg.onruby.dev] [127.0.0.1] [27666d0897c88b32] [BAh7B0kiD3Nlc3Np] Completed 200 OK in 298ms (Views: 286.2ms | ActiveRecord: 9.2ms)
1 голос
/ 18 марта 2014

Для Rails 3.2 с ActiveSupport::TaggedLogging, если вы используете :cookie_store:

config.log_tags = [ :uuid, :remote_ip, 
                    lambda { |r| "#{r.cookie_jar.signed["_session_id"]["session_id"]}" } ]

Примечание: Измените "_session_id" с вашим значением :key на config/initializers/session_store.rb

0 голосов
/ 23 марта 2017

К сожалению, это нелегко с тегами журнала Rails.Более того, он загромождает ваши журналы до такой степени, что они не читаются.

Я бы порекомендовал что-то вроде timber , он захватывает идентификаторы сессий (и более), просто дополняя ваши журналы метаданными.Это автоматически, и вы не теряете удобочитаемость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...