2009-06-03 15 views
9

¿Hay alguna manera de desactivar todo el registro (ya sea desde ActiveRecord, otras partes de Rails, complementos, etc.) desde un script que se ejecuta a través de script/runner? Tengo un script largo de carga de datos en ejecución, y está generando una cantidad absurda de información de registro inútil. Estoy no tratando de cambiar el entorno de script/runner (por ejemplo, producción, desarrollo, etc.): el script actualmente necesita ejecutarse en el entorno de "desarrollo", y lo está haciendo sin problemas en este momento.Deshabilitar el registro de Rails desde el script/runner

Todo lo que quiero hacer es suprimir todos los registros durante la vida del script. Después de leer los documentos, parece que si puedo obtener un identificador para su Rails::Configuration debería poder establecer log_level en algo distinto de :debug o configurar su logger en nil. ¿Estoy en el camino correcto? Si es así, ¿cómo obtengo acceso a su objeto Rails::Configuration?

Respuesta

26

Hay un par de formas en que puedo pensar.

1) Establecer el nivel de registro tan alto que nada va a ser registrados:

ActiveRecord::Base.logger.level = Logger::Severity::UNKNOWN 

Ver Logger::Severity para más de eso. DESCONOCIDO es el más alto.

"nivel" es solo un número, por lo que se puede establecer en Logger :: Severity :: UNKNOWN + 1 si se siente paranoico. :)

2) Enviar la salida a/dev/null.

ActiveRecord::Base.logger = Logger.new('/dev/null') 

(Asumo que hay sólo una instancia de registrador que es utilizado por los carriles, y que es el que se obtiene a través de ActiveRecord :: Base.logger. Si hay más de ellos que había tiene que encontrarlos y jugar con ellos también.)

Si no te gustan estos, puedes encontrar algo más leyendo los documentos Logger.

+0

Aha! Eso es exactamente lo que estaba buscando. ¡Gracias! –

+0

Pongo ActiveRecord :: Base.logger.level = Logger :: Severity :: UNKNOWN al final de enviroment.rb y eso funciona. (haciendo config.log_level =: la información no parece funcionar con mongrel) – Tod

+0

¡El segundo es apostar para mí, gracias! – Jirapong

0

La configuración está en sus archivos config/environments/*. Rb, que anulan el valor predeterminado para environment.rb. Cuando lo hace "Rails :: Initializer.run do | config |" se está ejecutando con el objeto config. Estoy bastante seguro de que puede cambiar cualquiera de sus necesidades, pero no estoy seguro de cómo le pasaría una bandera diciendo que era una secuencia de comandos script/runner actualmente en ejecución.

(Sé que dijo no estás interesado en el cambio del medio ambiente, pero yo pensé en tirar por ahí que usted podría create a new env para un script de carga de datos que tiene la mayor parte de la misma configuración, pero sin registrar con bastante facilidad)

+0

Huh. Es una buena idea, tal vez lo intentaré. Pero, por lo que usted sabe, ¿no hay forma de anular las configuraciones al vuelo? –

+0

No conozco ninguno; después de que se ejecute el entorno, ni siquiera estoy seguro de si puede acceder a los valores que se establecieron. –

Cuestiones relacionadas