Configurazione della stringa di formato del logger di Rails

Come posso configurare il logger delle rotaie per l’output delle stringhe di log in un altro formato? Mi piacerebbe ottenere qualcosa che sia più informativo come:

[Livello registro] [Ora] [Messaggio]

Debug: 01-20-2008 13: 11: 03.00: Metodo chiamato

Questo mi sarebbe di grande aiuto quando desidero personalizzare il mio development.log per i messaggi che provengono solo da un certo livello di log, come il debug.

Ha scavato e trovato questo post nel gruppo google di RubyOnRails Talk.

Così l’ho modificato un po ‘e l’ho messo alla fine del mio environment.rb:

module ActiveSupport class BufferedLogger def add(severity, message = nil, progname = nil, &block) return if @level > severity message = (message || (block && block.call) || progname).to_s level = { 0 => "DEBUG", 1 => "INFO", 2 => "WARN", 3 => "ERROR", 4 => "FATAL" }[severity] || "U" message = "[%s: %s #%d] %s" % [level, Time.now.strftime("%m%d %H:%M:%S"), $$, message] message = "#{message}\n" unless message[-1] == ?\n buffer << message auto_flush message end end end 

Ciò si traduce in una stringa di formato come questa:

[DEBUG: 0121 10:35:26 # 57078] Layout resi / _header (0.00089)

Per le app per rails 4, ho creato una gem semplice che non solo aggiunge il supporto per i tag di base come il timestamp e il livello di log, ma aggiunge anche il colore ai messaggi di log stessi.

https://github.com/phallguy/shog

Il problema con i tag è che ingombrano i tuoi registri fino al punto in cui sono illeggibili.

Consiglierei qualcosa come il legname . Aumenta automaticamente i log con il contesto (livello, tempo, id della sessione, ecc.) Senza sacrificare la leggibilità.

 # config/initializers/rack_logger.rb module Rails module Rack class Logger < ActiveSupport::LogSubscriber # Add UserAgent def started_request_message(request) 'Started %s "%s" for %s at %s by %s' % [ request.request_method, request.filtered_path, request.ip, Time.now.to_default_s, request.env['HTTP_USER_AGENT'] ] end end end end 

link sorgente