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.

event_writer.go 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package log
  4. import (
  5. "fmt"
  6. )
  7. // EventWriter is the general interface for all event writers
  8. // EventWriterBase is only used as its base interface
  9. // A writer implementation could override the default EventWriterBase functions
  10. // eg: a writer can override the Run to handle events in its own way with its own goroutine
  11. type EventWriter interface {
  12. EventWriterBase
  13. }
  14. // WriterMode is the mode for creating a new EventWriter, it contains common options for all writers
  15. // Its WriterOption field is the specified options for a writer, it should be passed by value but not by pointer
  16. type WriterMode struct {
  17. BufferLen int
  18. Level Level
  19. Prefix string
  20. Colorize bool
  21. Flags Flags
  22. Expression string
  23. StacktraceLevel Level
  24. WriterOption any
  25. }
  26. // EventWriterProvider is the function for creating a new EventWriter
  27. type EventWriterProvider func(writerName string, writerMode WriterMode) EventWriter
  28. var eventWriterProviders = map[string]EventWriterProvider{}
  29. func RegisterEventWriter(writerType string, p EventWriterProvider) {
  30. eventWriterProviders[writerType] = p
  31. }
  32. func HasEventWriter(writerType string) bool {
  33. _, ok := eventWriterProviders[writerType]
  34. return ok
  35. }
  36. func NewEventWriter(name, writerType string, mode WriterMode) (EventWriter, error) {
  37. if p, ok := eventWriterProviders[writerType]; ok {
  38. return p(name, mode), nil
  39. }
  40. return nil, fmt.Errorf("unknown event writer type %q for writer %q", writerType, name)
  41. }