package binarylog

import "google.golang.org/grpc/internal/binarylog"

Package binarylog implementation binary logging as defined in https://github.com/grpc/proposal/blob/master/A16-binary-logging.md.

Index

Variables

var (
	// AllLogger is a logger that logs all headers/messages for all RPCs. It's
	// for testing only.
	AllLogger = NewLoggerFromConfigString("*")
	// MdToMetadataProto converts metadata to a binary logging proto message.
	// It's for testing only.
	MdToMetadataProto = mdToMetadataProto
	// AddrToProto converts an address to a binary logging proto message. It's
	// for testing only.
	AddrToProto = addrToProto
)

Functions

func SetLogger

func SetLogger(l Logger)

SetLogger sets the binarg logger.

Only call this at init time.

Types

type Cancel

type Cancel struct {
	OnClientSide bool
}

Cancel configs the binary log entry to be a Cancel entry.

type ClientHalfClose

type ClientHalfClose struct {
	OnClientSide bool
}

ClientHalfClose configs the binary log entry to be a ClientHalfClose entry.

type ClientHeader

type ClientHeader struct {
	OnClientSide bool
	Header       metadata.MD
	MethodName   string
	Authority    string
	Timeout      time.Duration
	// PeerAddr is required only when it's on server side.
	PeerAddr net.Addr
}

ClientHeader configs the binary log entry to be a ClientHeader entry.

type ClientMessage

type ClientMessage struct {
	OnClientSide bool
	// Message can be a proto.Message or []byte. Other messages formats are not
	// supported.
	Message interface{}
}

ClientMessage configs the binary log entry to be a ClientMessage entry.

type LogEntryConfig

type LogEntryConfig interface {
	// contains filtered or unexported methods
}

LogEntryConfig represents the configuration for binary log entry.

type Logger

type Logger interface {
	// contains filtered or unexported methods
}

Logger is the global binary logger. It can be used to get binary logger for each method.

func NewLoggerFromConfigString

func NewLoggerFromConfigString(s string) Logger

NewLoggerFromConfigString reads the string and build a logger. It can be used to build a new logger and assign it to binarylog.Logger.

Example filter config strings:

If two configs exist for one certain method or service, the one specified later overrides the previous config.

type MethodLogger

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

MethodLogger is the sub-logger for each method.

func GetMethodLogger

func GetMethodLogger(methodName string) *MethodLogger

GetMethodLogger returns the methodLogger for the given methodName.

methodName should be in the format of "/service/method".

Each methodLogger returned by this method is a new instance. This is to generate sequence id within the call.

func (*MethodLogger) Log

func (ml *MethodLogger) Log(c LogEntryConfig)

Log creates a proto binary log entry, and logs it to the sink.

type ServerHeader

type ServerHeader struct {
	OnClientSide bool
	Header       metadata.MD
	// PeerAddr is required only when it's on client side.
	PeerAddr net.Addr
}

ServerHeader configs the binary log entry to be a ServerHeader entry.

type ServerMessage

type ServerMessage struct {
	OnClientSide bool
	// Message can be a proto.Message or []byte. Other messages formats are not
	// supported.
	Message interface{}
}

ServerMessage configs the binary log entry to be a ServerMessage entry.

type ServerTrailer

type ServerTrailer struct {
	OnClientSide bool
	Trailer      metadata.MD
	// Err is the status error.
	Err error
	// PeerAddr is required only when it's on client side and the RPC is trailer
	// only.
	PeerAddr net.Addr
}

ServerTrailer configs the binary log entry to be a ServerTrailer entry.

type Sink

type Sink interface {
	// Write will be called to write the log entry into the sink.
	//
	// It should be thread-safe so it can be called in parallel.
	Write(*pb.GrpcLogEntry) error
	// Close will be called when the Sink is replaced by a new Sink.
	Close() error
}

Sink writes log entry into the binary log sink.

sink is a copy of the exported binarylog.Sink, to avoid circular dependency.

var (
	// DefaultSink is the sink where the logs will be written to. It's exported
	// for the binarylog package to update.
	DefaultSink Sink = &noopSink{} // TODO(blog): change this default (file in /tmp).
)

func NewBufferedSink

func NewBufferedSink(o io.WriteCloser) Sink

NewBufferedSink creates a binary log sink with the given WriteCloser.

Write() marshals the proto message and writes it to the given writer. Each message is prefixed with a 4 byte big endian unsigned integer as the length.

Content is kept in a buffer, and is flushed every 60 seconds.

Close closes the WriteCloser.

Source Files

binarylog.go binarylog_testutil.go env_config.go method_logger.go sink.go

Version
v1.41.0-dev
Published
Jul 27, 2021
Platform
linux/amd64
Imports
20 packages
Last checked
6 hours ago

Tools for package owners.