code.gitea.io/gitea@v1.19.3/modules/log/buffer.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package log 5 6 import ( 7 "bytes" 8 "sync" 9 ) 10 11 type bufferWriteCloser struct { 12 mu sync.Mutex 13 buffer bytes.Buffer 14 } 15 16 func (b *bufferWriteCloser) Write(p []byte) (int, error) { 17 b.mu.Lock() 18 defer b.mu.Unlock() 19 return b.buffer.Write(p) 20 } 21 22 func (b *bufferWriteCloser) Close() error { 23 return nil 24 } 25 26 func (b *bufferWriteCloser) String() string { 27 b.mu.Lock() 28 defer b.mu.Unlock() 29 return b.buffer.String() 30 } 31 32 // BufferLogger implements LoggerProvider and writes messages in a buffer. 33 type BufferLogger struct { 34 WriterLogger 35 } 36 37 // NewBufferLogger create BufferLogger returning as LoggerProvider. 38 func NewBufferLogger() LoggerProvider { 39 log := &BufferLogger{} 40 log.NewWriterLogger(&bufferWriteCloser{}) 41 return log 42 } 43 44 // Init inits connection writer 45 func (log *BufferLogger) Init(string) error { 46 log.NewWriterLogger(log.out) 47 return nil 48 } 49 50 // Content returns the content accumulated in the content provider 51 func (log *BufferLogger) Content() (string, error) { 52 return log.out.(*bufferWriteCloser).String(), nil 53 } 54 55 // Flush when log should be flushed 56 func (log *BufferLogger) Flush() { 57 } 58 59 // ReleaseReopen does nothing 60 func (log *BufferLogger) ReleaseReopen() error { 61 return nil 62 } 63 64 // GetName returns the default name for this implementation 65 func (log *BufferLogger) GetName() string { 66 return "buffer" 67 } 68 69 func init() { 70 Register("buffer", NewBufferLogger) 71 }