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  }