code: func (c callHandler) Log(log *log15.Record) error {
  	ctx := log.Ctx
  	var ctxMap ContextMap
  	if len(ctx) > 0 {
  		ctxMap = make(ContextMap, len(ctx)/2)
  
  		for i := 0; i < len(ctx); i += 2 {
  			v := ctx[i]
  			key, ok := v.(string)
  			if !ok {
  				key = fmt.Sprintf("LOGGER_INVALID_KEY %v", v)
  			}
  			var value interface{}
  			if len(ctx) > i+1 {
  				value = ctx[i+1]
  			} else {
  				value = "LOGGER_VALUE_MISSING"
  			}
  			ctxMap[key] = value
  		}
  	} else {
  		ctxMap = make(ContextMap, 0)
  	}
  	r := &Record{Message: log.Msg, Context: ctxMap, Time: log.Time, Level: LogLevel(log.Lvl), Call: CallStack(log.Call)}
  	return c(r)
  }
docs: // Log implementation, reads the record and extracts the details from the log record
  // Hiding the implementation.