code: func (mp *MultiLog) OuterLog(level Level, tags ...string) io.Writer {
  	if mp.chouter != nil {
  		return &outer{
  			ch:  mp.chouter,
  			buf: make([]byte, 0),
  		}
  	}
  	mp.chclose = make(chan chan struct{})
  	mp.chouter = make(chan []byte)
  	if len(mp.mp) < 2 {
  		return nil
  	}
  	f := mp.mp[0].GetF()
  	logger := f.NewEntry(mp).Tag("outer").EntryLevel(level)
  	go func() {
  		for {
  			select {
  			case buf := <-mp.chouter:
  				logger.Tag(tags...).Println(string(buf))
  			case ch := <-mp.chclose:
  				ch <- struct{}{}
  				return
  			}
  		}
  	}()
  	return &outer{
  		ch:  mp.chouter,
  		buf: make([]byte, 0),
  	}
  }
docs: // outerLog is like outers outerLogs but the nem entry is
  // created from the first BackLog in the list.