module SemanticLogger::Loggable

def self.included(base)

def self.included(base)
  base.extend ClassMethods
  base.singleton_class.class_eval do
    undef_method :logger if method_defined?(:logger)
    undef_method :logger= if method_defined?(:logger=)
  end
  base.class_eval do
    undef_method :logger if method_defined?(:logger)
    undef_method :logger= if method_defined?(:logger=)
    # Returns [SemanticLogger::Logger] class level logger
    def self.logger
      @semantic_logger ||= SemanticLogger[self]
    end
    # Replace instance class level logger
    def self.logger=(logger)
      @semantic_logger = logger
    end
    # Returns [SemanticLogger::Logger] instance level logger
    def logger
      @semantic_logger ||= self.class.logger
    end
    # Replace instance level logger
    def logger=(logger)
      @semantic_logger = logger
    end
  end
end

def self.logger

Returns [SemanticLogger::Logger] class level logger
def self.logger
  @semantic_logger ||= SemanticLogger[self]
end

def self.logger=(logger)

Replace instance class level logger
def self.logger=(logger)
  @semantic_logger = logger
end

def logger

Returns [SemanticLogger::Logger] instance level logger
def logger
  @semantic_logger ||= self.class.logger
end

def logger=(logger)

Replace instance level logger
def logger=(logger)
  @semantic_logger = logger
end