buffer_pool.go raw

   1  package logrus
   2  
   3  import (
   4  	"bytes"
   5  	"sync"
   6  )
   7  
   8  var (
   9  	bufferPool BufferPool
  10  )
  11  
  12  type BufferPool interface {
  13  	Put(*bytes.Buffer)
  14  	Get() *bytes.Buffer
  15  }
  16  
  17  type defaultPool struct {
  18  	pool *sync.Pool
  19  }
  20  
  21  func (p *defaultPool) Put(buf *bytes.Buffer) {
  22  	p.pool.Put(buf)
  23  }
  24  
  25  func (p *defaultPool) Get() *bytes.Buffer {
  26  	return p.pool.Get().(*bytes.Buffer)
  27  }
  28  
  29  // SetBufferPool allows to replace the default logrus buffer pool
  30  // to better meets the specific needs of an application.
  31  func SetBufferPool(bp BufferPool) {
  32  	bufferPool = bp
  33  }
  34  
  35  func init() {
  36  	SetBufferPool(&defaultPool{
  37  		pool: &sync.Pool{
  38  			New: func() interface{} {
  39  				return new(bytes.Buffer)
  40  			},
  41  		},
  42  	})
  43  }
  44