Skip to content

samber/slog-slack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

71 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

slog: Slack handler

tag Go Version GoDoc Build Status Go report Coverage Contributors License

A Slack Handler for slog Go library.

See also:

HTTP middlewares:

Loggers:

Log sinks:

πŸš€ Install

go get github.com/samber/slog-slack/v2

Compatibility: go >= 1.21

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

πŸ’‘ Usage

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

Handler options

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

    // slack webhook url
    WebhookURL string
    // slack bot token
    BotToken string
    // slack channel (default: webhook channel)
    Channel string
    // bot username (default: webhook username)
    Username string
    // bot emoji (default: webhook emoji)
    IconEmoji string
    // bot emoji (default: webhook emoji)
    IconURL string
    // Not implemented yet, but we would like your feedback here: #7
    // ThreadTimestamp string

    // API request timeout (default: 10s)
    Timeout time.Duration

    // optional: customize Slack message builder
    Converter Converter

    // optional: see slog.HandlerOptions
    AddSource   bool
    ReplaceAttr func(groups []string, a slog.Attr) slog.Attr
}

Attributes will be injected in message attachments.

Other global parameters:

slogslack.SourceKey = "source"
slogslack.ColorMapping = map[slog.Level]string{...}

screenshot

Example

Using webhook

Generate a webhook here.

import (
    slogslack "github.com/samber/slog-slack/v2"
    "log/slog"
)

func main() {
    webhook := "https://hooks.slack.com/services/xxx/yyy/zzz"
    channel := "alerts"

    logger := slog.New(slogslack.Option{Level: slog.LevelError, WebhookURL: webhook, Channel: channel}.NewSlackHandler())
    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")

    // push record to a thread
    logger.ErrorContext(
        slogslack.WithThreadTimestamp(context.Background(), "1714929099.4238"),
        "An error",
    )
}

Using bot token

Use Bot token.

import (
	slogslack "github.com/samber/slog-slack/v2"
	"log/slog"
)

func main() {
    token := "xoxb-"
    channel := "alerts"

    logger := slog.New(slogslack.Option{Level: slog.LevelError, BotToken: token, Channel: channel}.NewSlackHandler())
    logger = logger.
        With("environment", "dev").
        With("release", "v1.0.0")
}

🀝 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.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy