diode

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Sep 30, 2024 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package diode provides a thread-safe, lock-free, non-blocking io.Writer wrapper.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Alerter

type Alerter func(missed int)

type Writer

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

Writer is a io.Writer wrapper that uses a diode to make Write lock-free, non-blocking and thread safe.

func NewWriter

func NewWriter(w io.Writer, size int, pollInterval time.Duration, f Alerter) Writer

NewWriter creates a writer wrapping w with a many-to-one diode in order to never block log producers and drop events if the writer can't keep up with the flow of data.

Use a diode.Writer when

wr := diode.NewWriter(w, 1000, 0, func(missed int) {
    log.Printf("Dropped %d messages", missed)
})
log := zerolog.New(wr)

If pollInterval is greater than 0, a poller is used otherwise a waiter is used.

See code.cloudfoundry.org/go-diodes for more info on diode.

Example
package main

import (
	"fmt"
	"os"

	"github.com/CH-WallaceCardoso/zerolog"
	"github.com/CH-WallaceCardoso/zerolog/diode"
)

func main() {
	w := diode.NewWriter(os.Stdout, 1000, 0, func(missed int) {
		fmt.Printf("Dropped %d messages\n", missed)
	})
	log := zerolog.New(w)
	log.Print("test")

	w.Close()

}
Output:

{"level":"debug","message":"test"}

func (Writer) Close

func (dw Writer) Close() error

Close releases the diode poller and call Close on the wrapped writer if io.Closer is implemented.

func (Writer) Write

func (dw Writer) Write(p []byte) (n int, err error)

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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