outputnet

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 18, 2026 License: MIT Imports: 13 Imported by: 0

README

modules/output/net

output.net 是统一网络输出模块,用于把日志发送到任意 tcp / udp 服务端,不要求对端是 syslog 协议。

核心能力

  • 通用网络传输:network + addr
  • 延迟建连:首次写入时建立连接
  • 断线重连:写失败后自动重连一次
  • Backoff:避免目标不可达时频繁重拨
  • 异步发送:不阻塞主日志路径

模块配置

通过 modules.Config 传入:

modules.Config{
  "network": "tcp",          // tcp / udp
  "addr": "127.0.0.1:9000",  // 目标地址
  "level": "info",           // debug/info/warn/error
  "codec": "raw",            // raw / json / 自定义注册名
  "dial_timeout": "3s",
  "write_timeout": "3s",
  "delimiter": "\n",         // 每条日志末尾分隔符
}

Builder 用法

logger := slog.NewLoggerBuilder().
  UseNetOutput(&outputnet.SenderOption{
    Network:   "udp",
    Addr:      "127.0.0.1:9000",
    Delimiter: []byte("\n"),
  }).
  Build()

默认编码是行文本:level=<LEVEL> msg=<MESSAGE> key=value...

可选内置 codec:

  • raw:行文本
  • json:JSON payload

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewRawHandler

func NewRawHandler(w io.Writer, level slog.Leveler) slog.Handler

func NewRawHandlerWithOption

func NewRawHandlerWithOption(opt RawOption) slog.Handler

func RegisterCodec

func RegisterCodec(codec Codec) error

RegisterCodec registers a codec by name.

Types

type Codec

type Codec interface {
	Name() string
	Encode(record *slog.Record, attrs []slog.Attr, groups []string) ([]byte, error)
}

Codec converts slog records into bytes for network transport.

func GetCodec

func GetCodec(name string) (Codec, bool)

GetCodec returns a registered codec. Empty name defaults to raw.

type DialFunc

type DialFunc func(network, addr string, timeout time.Duration) (stdnet.Conn, error)

DialFunc customizes dialing behavior.

type NetAdapter

type NetAdapter struct {
	*modules.BaseModule
	// contains filtered or unexported fields
}

NetAdapter sends records to generic TCP/UDP endpoints.

func NewNetAdapter

func NewNetAdapter() *NetAdapter

func (*NetAdapter) Configure

func (a *NetAdapter) Configure(config modules.Config) error

type RawHandler

type RawHandler struct {
	// contains filtered or unexported fields
}

RawHandler is a generic network output handler with async transport.

func (*RawHandler) Enabled

func (h *RawHandler) Enabled(_ context.Context, level slog.Level) bool

func (*RawHandler) Handle

func (h *RawHandler) Handle(_ context.Context, record slog.Record) error

func (*RawHandler) WithAttrs

func (h *RawHandler) WithAttrs(attrs []slog.Attr) slog.Handler

func (*RawHandler) WithGroup

func (h *RawHandler) WithGroup(name string) slog.Handler

type RawOption

type RawOption struct {
	Level  slog.Leveler
	Writer io.Writer
	Codec  Codec
}

RawOption controls generic output.net formatting.

type Sender

type Sender struct {
	// contains filtered or unexported fields
}

Sender is a concurrency-safe network writer with lazy dialing and reconnect.

func NewSender

func NewSender(opt SenderOption) *Sender

NewSender creates a reusable network sender.

func (*Sender) Close

func (s *Sender) Close() error

Close closes the underlying connection.

func (*Sender) Write

func (s *Sender) Write(p []byte) (int, error)

Write sends bytes to the configured network endpoint.

type SenderOption

type SenderOption struct {
	Network          string
	Addr             string
	DialTimeout      time.Duration
	WriteTimeout     time.Duration
	RetryBackoff     time.Duration
	DisableReconnect bool
	Delimiter        []byte
	Dial             DialFunc
}

SenderOption defines transport-level options for network output.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL