55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
// Copyright 2023 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package log
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
)
 | 
						|
 | 
						|
// EventWriter is the general interface for all event writers
 | 
						|
// EventWriterBase is only used as its base interface
 | 
						|
// A writer implementation could override the default EventWriterBase functions
 | 
						|
// eg: a writer can override the Run to handle events in its own way with its own goroutine
 | 
						|
type EventWriter interface {
 | 
						|
	EventWriterBase
 | 
						|
}
 | 
						|
 | 
						|
// WriterMode is the mode for creating a new EventWriter, it contains common options for all writers
 | 
						|
// Its WriterOption field is the specified options for a writer, it should be passed by value but not by pointer
 | 
						|
type WriterMode struct {
 | 
						|
	BufferLen int
 | 
						|
 | 
						|
	Level    Level
 | 
						|
	Prefix   string
 | 
						|
	Colorize bool
 | 
						|
	Flags    Flags
 | 
						|
 | 
						|
	Expression string
 | 
						|
 | 
						|
	StacktraceLevel Level
 | 
						|
 | 
						|
	WriterOption any
 | 
						|
}
 | 
						|
 | 
						|
// EventWriterProvider is the function for creating a new EventWriter
 | 
						|
type EventWriterProvider func(writerName string, writerMode WriterMode) EventWriter
 | 
						|
 | 
						|
var eventWriterProviders = map[string]EventWriterProvider{}
 | 
						|
 | 
						|
func RegisterEventWriter(writerType string, p EventWriterProvider) {
 | 
						|
	eventWriterProviders[writerType] = p
 | 
						|
}
 | 
						|
 | 
						|
func HasEventWriter(writerType string) bool {
 | 
						|
	_, ok := eventWriterProviders[writerType]
 | 
						|
	return ok
 | 
						|
}
 | 
						|
 | 
						|
func NewEventWriter(name, writerType string, mode WriterMode) (EventWriter, error) {
 | 
						|
	if p, ok := eventWriterProviders[writerType]; ok {
 | 
						|
		return p(name, mode), nil
 | 
						|
	}
 | 
						|
	return nil, fmt.Errorf("unknown event writer type %q for writer %q", writerType, name)
 | 
						|
}
 |