Documentation
¶
Overview ¶
Package logsink 提供 MGIN 接口访问日志(PostLog)的异步分发能力。
设计目标:
- 中间件 middleware/postlog 只负责产生日志并调用 Emit,不关心日志落到哪里;
- 落库、发 Kafka、写 Elasticsearch 等动作由注册的 Handler 完成;
- 外部插件(mgkafka、elasticsearch 插件等)只需实现 Handler 并在启动时注册, 即可接收全量接口日志,框架无需为每种目标硬编码分支。
处理模型:每个 Handler 拥有独立的缓冲队列与消费协程,慢 Handler 互不影响; 投递是非阻塞的,队列满时丢弃并计数,绝不会拖慢接口响应。
Index ¶
- Constants
- Variables
- func Close(timeout time.Duration)
- func Emit(entry *Entry) bool
- func HandlerNames() []string
- func HasHandlers() bool
- func MustRegister(h Handler, opts ...Option)
- func Register(h Handler, opts ...Option) error
- func Reset()
- func SetDropLogger(fn func(handler string, dropped uint64))
- func SetErrorLogger(fn func(handler string, err error))
- func Unregister(name string, timeout time.Duration) bool
- type Closer
- type Entry
- type Handler
- type HandlerFunc
- type HandlerStats
- type Option
- type Options
Constants ¶
View Source
const ( // DefaultQueueSize 每个 Handler 默认的缓冲队列长度。 DefaultQueueSize = 1024 // DefaultWorkers 每个 Handler 默认的消费协程数,1 保证日志按到达顺序处理。 DefaultWorkers = 1 // DefaultShutdownTimeout 关闭时等待队列排空的默认超时。 DefaultShutdownTimeout = 3 * time.Second )
Variables ¶
View Source
var ErrDuplicateHandler = errors.New("logsink: 同名 handler 已注册")
ErrDuplicateHandler 同名 Handler 重复注册。
View Source
var ErrInvalidHandler = errors.New("logsink: handler 不能为空且 Name 不能为空")
ErrInvalidHandler Handler 为空或 Name 为空。
Functions ¶
func MustRegister ¶
MustRegister 同 Register,注册失败时 panic。适用于启动阶段装配。
func SetDropLogger ¶
SetDropLogger 设置日志丢弃时的回调,参数为 handler 名称与该 handler 累计丢弃条数。 回调已做 60 秒限流。默认不输出任何内容,由 MGIN 内部接管为 logs 包输出。
func SetErrorLogger ¶
SetErrorLogger 设置 Handler 写失败或 panic 时的回调。 回调已做 60 秒限流。默认不输出任何内容。
Types ¶
type Handler ¶
Handler 日志处理器。由内置实现或外部插件实现,注册后即可收到全量接口日志。
Name 用于注册去重、日志标识以及运行期注销,必须唯一且非空。 Write 在独立协程中被调用,实现必须是并发安全的;返回 error 仅用于统计与告警。
type HandlerFunc ¶
type HandlerFunc struct {
// contains filtered or unexported fields
}
HandlerFunc 把普通函数适配成 Handler,方便外部插件一行挂接。
sink := logsink.NewHandlerFunc("kafka", func(e *logsink.Entry) error {
return kafka.Send(topic, e)
}).WithClose(kafka.Close)
logsink.Register(sink)
func NewHandlerFunc ¶
func NewHandlerFunc(name string, write func(entry *Entry) error) *HandlerFunc
NewHandlerFunc 用名称与写函数构造 Handler。
func (*HandlerFunc) WithClose ¶
func (f *HandlerFunc) WithClose(fn func() error) *HandlerFunc
WithClose 设置关闭回调,返回自身以便链式调用。
type HandlerStats ¶
HandlerStats 单个 Handler 的运行状态。
Click to show internal directories.
Click to hide internal directories.