¿Ruby''s stdlib Logger clase thread-safe?
multithreading logging (3)
A continuación está mi respuesta original, que en realidad es incorrecta . Lea el comentario de Nemo157 a continuación. Lo dejé aquí solo como referencia.
Original:
No creo que importe Todas las implementaciones de Ruby que conozco hasta ahora ejecutan efectivamente un hilo a la vez de todos modos: te permite iniciar muchos hilos, pero solo un hilo se ejecuta a la vez por proceso.
En resumen, ¿la clase Logger de la biblioteca estándar en Ruby es segura para subprocesos? Solo la información útil que Google presentó fue alguien en un foro que dice que "parece" seguro para subprocesos. Y no tengo ganas de pasar tiempo probando un registrador para tratar de averiguar si es o no.
Por el momento estoy usando log4r, que es seguro para subprocesos, pero es excesivo si la biblioteca estándar ya lo hace.
Algunas clases de Ruby están diseñadas para ser seguras para subprocesos, pero no lo dicen explícitamente en palabras de una sílaba en su documentación. A diferencia de la documentación en otros lenguajes de programación como PHP.
Recuerdo que me preguntaron si Queue
era seguro para subprocesos en , y aunque lo era, la documentación no lo deletreaba.
Una mirada rápida a logger.rb revela un código como el siguiente:
def write(message)
@mutex.synchronize do
if @shift_age and @dev.respond_to?(:stat)
begin
check_shift_log
rescue
raise Logger::ShiftingError.new("Shifting failed. #{$!}")
end
end
@dev.write(message)
end
end
Por lo tanto, aunque no puedo garantizar si la seguridad de las hebras es correcta , puedo confirmar que está haciendo un esfuerzo conjunto para hacerlo bien.
PD: a menudo es fácil responder preguntas como esta leyendo el código :-)