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