buffer_pool.go (663B)
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 }