code: func (c *logCache) AddLog(uri, b64PK string, logger blog.Logger) (*Log, error) {
  	// Lock the mutex for reading to check the cache
  	c.RLock()
  	log, present := c.logs[b64PK]
  	c.RUnlock()
  
  	// If we have already added this log, give it back
  	if present {
  		return log, nil
  	}
  
  	// Lock the mutex for writing to add to the cache
  	c.Lock()
  	defer c.Unlock()
  
  	// Construct a Log, add it to the cache, and return it to the caller
  	log, err := NewLog(uri, b64PK, logger)
  	if err != nil {
  		return nil, err
  	}
  	c.logs[b64PK] = log
  	return log, nil
  }
docs: // AddLog adds a *Log to the cache by constructing the statName, client and
  // verifier for the given uri & base64 public key.