You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

buffer.go 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package log
  5. import (
  6. "bytes"
  7. "sync"
  8. )
  9. type bufferWriteCloser struct {
  10. mu sync.Mutex
  11. buffer bytes.Buffer
  12. }
  13. func (b *bufferWriteCloser) Write(p []byte) (int, error) {
  14. b.mu.Lock()
  15. defer b.mu.Unlock()
  16. return b.buffer.Write(p)
  17. }
  18. func (b *bufferWriteCloser) Close() error {
  19. return nil
  20. }
  21. func (b *bufferWriteCloser) String() string {
  22. b.mu.Lock()
  23. defer b.mu.Unlock()
  24. return b.buffer.String()
  25. }
  26. // BufferLogger implements LoggerProvider and writes messages in a buffer.
  27. type BufferLogger struct {
  28. WriterLogger
  29. }
  30. // NewBufferLogger create BufferLogger returning as LoggerProvider.
  31. func NewBufferLogger() LoggerProvider {
  32. log := &BufferLogger{}
  33. log.NewWriterLogger(&bufferWriteCloser{})
  34. return log
  35. }
  36. // Init inits connection writer
  37. func (log *BufferLogger) Init(string) error {
  38. log.NewWriterLogger(log.out)
  39. return nil
  40. }
  41. // Content returns the content accumulated in the content provider
  42. func (log *BufferLogger) Content() (string, error) {
  43. return log.out.(*bufferWriteCloser).String(), nil
  44. }
  45. // Flush when log should be flushed
  46. func (log *BufferLogger) Flush() {
  47. }
  48. // ReleaseReopen does nothing
  49. func (log *BufferLogger) ReleaseReopen() error {
  50. return nil
  51. }
  52. // GetName returns the default name for this implementation
  53. func (log *BufferLogger) GetName() string {
  54. return "buffer"
  55. }
  56. func init() {
  57. Register("buffer", NewBufferLogger)
  58. }