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