2011-03-02 19 views
14

creé un anotador personalizado para mi aplicación, denominada CRON_LOG, simplemente añadiendo esta pieza de código a config/environment.rbhora antes del mensaje de registro

CRON_LOG = Logger.new("#{Rails.root}/log/cron.log") 
CRON_LOG.level = Logger::INFO 

Y luego, cuando quiero entrar algo , solo hazlo:

CRON_LOG.info "something" 

Funciona bien, pero me gustaría agregar la marca de tiempo actual antes de cada mensaje de registro. Por supuesto, puedo agregar Time.now a mi mensaje de registro, pero me gustaría saber si hay alguna manera de agregarlo como predeterminado a cada mensaje de registro. Cómo puedo hacer eso ?

Gracias.

Respuesta

8

Puede redefinir el método apropiado (por ejemplo, añadiendo lo siguiente a environment.rb o en un inicializador):

class Logger 
    def format_message(severity, timestamp, progname, msg) 
    "#{timestamp} (#{$$}) #{msg}\n" 
    end 
end 

[Precaución: esta podría interrumpir otros registradores; véase la respuesta de Stephen como una solución segura - jph]

+0

perfecto. ¡Gracias! – Brian

+2

Aceptar como una respuesta si funcionó, por lo que otras personas con el mismo problema lo detectarán inmediatamente en el futuro. :-) –

+0

He agregado una forma menos invasiva de manejar esto. En cualquier caso, recomendaría la subclasificación de 'Logger' o la redefinición de 'format_message' en la instancia si planea sobrecargar el método para evitar modificar el comportamiento de otros registradores activos en tiempo de ejecución. – stephencelis

35

La manera más fácil de hacer un registrador de Syslog con formato es asignar un formateador directamente:

logger = Logger.new Rails.root.join('path', 'to', 'log') 
logger.formatter = Logger::Formatter.new 
logger.info 'Hello, world!' 
# Writes: 
# 
# I, [2011-06-02T20:02:34.579501 #15444] INFO -- : Hello, world! 
Cuestiones relacionadas