Skip to content

plinkplinkfizz/slog-graylog

This branch is 5 commits ahead of, 44 commits behind samber/slog-graylog:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a32ea9e Β· Jun 17, 2023

History

15 Commits
Apr 12, 2023
Jun 17, 2023
Jun 17, 2023
Apr 12, 2023
Apr 12, 2023
Apr 30, 2023
May 19, 2023
Apr 30, 2023
Apr 12, 2023
Jun 17, 2023
Jun 17, 2023
Apr 12, 2023
Jun 17, 2023
May 23, 2023
Apr 12, 2023

Repository files navigation

slog: Graylog handler

tag Go Version GoDoc Build Status Go report Coverage Contributors License

A Graylog Handler for slog Go library.

See also:

πŸš€ Install

go get github.com/samber/slog-graylog

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-graylog

Handler options

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

	// connection to graylog
	Writer *gelf.Writer

	// optional: customize json payload builder
	Converter Converter
}

Attributes will be injected in log payload.

Example

import (
	"github.com/Graylog2/go-gelf/gelf"
	sloggraylog "github.com/samber/slog-graylog"
	"golang.org/x/exp/slog"
)

func main() {
    // docker-compose up -d
	// or
	// ncat -l 12201 -u
	gelfWriter, err := gelf.NewWriter("localhost:12201")
	if err != nil {
		log.Fatalf("gelf.NewWriter: %s", err)
	}

	logger := slog.New(sloggraylog.Option{Level: slog.LevelDebug, Writer: gelfWriter}.NewGraylogHandler())
    logger = logger.
        With("environment", "dev").
        With("release", "v1.0.0")

    // log error
    logger.
        With("category", "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:

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


{
    "timestamp":"2023-04-10T14:00:0.000000+00:00",
    "level":"INFO",
    "message":"user registration",
    "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.

Releases

No releases published

Packages

No packages published

Languages

  • Go 92.4%
  • Makefile 7.6%