code: def _write(self, level, correlation_id, ex, message):
          
          error = ErrorDescriptionFactory.create(ex) if ex != None else None
          source = socket.gethostname() # Todo: add process/module name
          log_message = LogMessage(level, source, correlation_id, error, message)
          
          self._lock.acquire()
          try:
              self._cache.append(log_message)
          finally:
              self._lock.release()
  
          self._update()
docs: Writes a log message to the logger destination.
  
          :param level: a log level.
  
          :param correlation_id: (optional) transaction id to trace execution through call chain.
  
          :param ex: an error object associated with this message.
  
          :param message: a human-readable message to log.