module Asciidoctor::LoggerManager

def logger pipe = $stderr

NOTE subsequent calls to logger access the logger via the logger property directly
def logger pipe = $stderr
  memoize_logger
  @logger ||= (@logger_class.new pipe)
end

def logger= new_logger

def logger= new_logger
  @logger = new_logger || (@logger_class.new $stderr)
end

def memoize_logger

def memoize_logger
  class << self
    alias logger logger # suppresses warning from CRuby
    attr_reader :logger
  end
end