# frozen_string_literal: true

# Subclass IO because Logger does an is_a? check
class BackgroundLog < IO
	def initialize(io)
		@io = io
		@q = Queue.new
		thread
		at_exit do
			@q << :done
			thread.join
		end
	end

	def thread
		@thread ||= Thread.new do
			loop do
				m = @q.pop
				break if m == :done

				@io.write m
			end
		end
	end

	def write(s)
		@q << s
	end
end
