Suggestion: Instead of immediately logging a `fullWarningLog` on every channel full, one can do something like:

```
select {
case self.appendCh <- log:
  //nothing
case time.After(5 * time.Second):
  self.appendCh <- fullWarningLog()
  self.appendCh <- log
}
```

I expect a small wait (5 seconds was only an example) would clean up a few instances of multi-logging a full warning log.