8000 GitHub - abecodes/slog-fluentd: 🚨 slog: Fluentd handler
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

abecodes/slog-fluentd

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

slog: Fluentd handler

tag Go Version GoDoc Build Status Go report Coverage Contributors License

A Fluentd Handler for slog Go library.

See also:

πŸš€ Install

go get github.com/samber/slog-fluentd

Compatibility: go >= 1.20.3

This library is v0 and follows SemVer strictly. On slog final release (go 1.21), this library will go v1.

No breaking changes will be made to exported APIs before v1.0.0.

πŸ’‘ Usage

GoDoc: https://pkg.go.dev/github.com/samber/slog-fluentd

Handler options

type Option struct {
	// log level (default: debug)
	Level slog.Leveler

	// connection to Fluentd
	Client *fluentd.Fluentd
    Tag    string

	// optional: customize json payload builder
	Converter Converter
}

Attributes will be injected in log payload.

Fluentd tag can be inserted in logger options or in a record attribute of type string.

Example

import (
	"github.com/fluent/fluent-logger-golang/fluent"
	slogfluentd "github.com/samber/slog-fluentd"
	"golang.org/x/exp/slog"
)

func main() {
	// docker-compose up -d
	client, err := fluent.New(fluent.Config{
		FluentHost:    "localhost",
		FluentPort:    24224,
		FluentNetwork: "tcp",
	})
	if err != nil {
		log.Fatal(err.Error())
	}


    logger := slog.New(slogfluentd.Option{Level: slog.LevelDebug, Conn: conn, Tag: "api"}.NewFluentdHandler())
    logger = logger.
        With("environment", "dev").
        With("release", "v1.0.0")

    // log error
    logger.
        With("tag", "api.sql").
        With("query.statement", "SELECT COUNT(*) FROM users;").
        With("query.duration", 1*time.Second).
        With("error", fmt.Errorf("could not count users")).
        Error("caramba!")

    // log user signup
    logger.
        With(
            slog.Group("user",
                slog.String("id", "user-123"),
                slog.Time("created_at", time.Now()),
            ),
        ).
        Info("user registration")
}

Output:

// tag: api.sql
{
    "timestamp":"2023-04-10T14:00:0.000000+00:00",
    "level":"ERROR",
    "message":"caramba!",
    "tag":"api.sql",
    "error":{
        "error":"could not count users",
        "kind":"*errors.errorString",
        "stack":null
    },
    "extra":{
        "environment":"dev",
        "release":"v1.0.0",
        "query.statement":"SELECT COUNT(*) FROM users;",
        "query.duration": "1s"
    }
}


// tag: api
{
    "timestamp":"2023-04-10T14:00:0.000000+00:00",
    "level":"INFO",
    "message":"user registration",
    "tag":"api",
    "error":null,
    "extra":{
        "environment":"dev",
        "release":"v1.0.0",
        "user":{
            "id":"user-123",
            "created_at":"2023-04-10T14:00:0.000000+00:00"
        }
    }
}

🀝 Contributing

Don't hesitate ;)

# Install some dev dependencies
make tools

# Run tests
make test
# or
make watch-test

πŸ‘€ Contributors

Contributors

πŸ’« Show your support

Give a ⭐️ if this project helped you!

GitHub Sponsors

πŸ“ License

Copyright Β© 2023 Samuel Berthe.

This project is MIT licensed.

About

🚨 slog: Fluentd handler

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 84.9%
  • Makefile 15.1%
0