class SemanticLogger::SyncProcessor

are monitor protected in case SyncProcessor is being used in a multi-threaded environment.
Appenders are designed to only be used by one thread at a time, so all calls
The SyncProcessor performs logging in the current thread.

def self.logger

By default logs to $stderr
For example when an appender is not working etc..
Internal logger for SemanticLogger
def self.logger
  @logger ||=
    begin
      l      = SemanticLogger::Appender::IO.new($stderr, level: :warn)
      l.name = name
      l
    end
end

def add(...)

def add(...)
  @monitor.synchronize { @appenders.add(...) }
end

def close

def close
  @monitor.synchronize { @appenders.close }
end

def flush

def flush
  @monitor.synchronize { @appenders.flush }
end

def initialize(appenders = nil)

def initialize(appenders = nil)
  @monitor   = Monitor.new
  @appenders = appenders || Appenders.new(self.class.logger.dup)
end

def log(...)

def log(...)
  @monitor.synchronize { @appenders.log(...) }
end

def reopen(*args)

def reopen(*args)
  @monitor.synchronize { @appenders.reopen(*args) }
end

def start

def start
  # NOP
end