Jeffrey Paul
f964a0d2e4
# Aider chat conversation: USER: ../custom_logger.go:21:7: undefined: slog.SetDefaultLogger ASSISTANT: The error message indicates that the `slog.SetDefaultLogger` function is not defined. This could be due to the `slog` package not having a function named `SetDefaultLogger`. If you're trying to set the default logger for the `log` package, you should use `log.SetOutput` function. Here is the *SEARCH/REPLACE block* to replace `slog.SetDefaultLogger` with `log.SetOutput` in `custom_logger.go`: custom_logger.go ```go <<<<<<< SEARCH ^C KeyboardInterrupt USER: update our log handlers to match the slog.Handler interface. then update our customlogger to also match the slog.Handler interface. ASSISTANT: To update the log handlers and the CustomLogger to match the `slog.Handler` interface, we need to modify the `console_handler.go`, `json_handler.go`, `relp_handler.go`, `webhook_handler.go`, and `custom_logger.go` files. Here are the *SEARCH/REPLACE* blocks: console_handler.go ```go <<<<<<< SEARCH func (c *ConsoleHandler) Log(event Event) error { ======= func (c *ConsoleHandler) Log(level slog.Level, message string, data ...slog.Field) error { >>>>>>> REPLACE ``` json_handler.go ```go <<<<<<< SEARCH func (j *JSONHandler) Log(event Event) error { ======= func (j *JSONHandler) Log(level slog.Level, message string, data ...slog.Field) error { >>>>>>> REPLACE ``` relp_handler.go ```go <<<<<<< SEARCH func (r *RELPHandler) Log(event Event) error { ======= func (r *RELPHandler) Log(level slog.Level, message string, data ...slog.Field) error { >>>>>>> REPLACE ``` webhook_handler.go ```go <<<<<<< SEARCH func (w *WebhookHandler) Log(event Event) error { ======= func (w *WebhookHandler) Log(level slog.Level, message string, data ...slog.Field) error { >>>>>>> REPLACE ``` custom_logger.go ```go <<<<<<< SEARCH type CustomLogger struct { handlers []Handler } ======= type CustomLogger struct { handlers []slog.Handler } func (cl *CustomLogger) Log(level slog.Level, message string, data ...slog.Field) error { for _, handler := range cl.handlers { if err := handler.Log(level, message, data...); err != nil { return err } } return nil } >>>>>>> REPLACE ``` |
||
---|---|---|
tools | ||
.gitignore | ||
Makefile | ||
README.md | ||
TODO | ||
console_handler.go | ||
custom_logger.go | ||
event.go | ||
go.mod | ||
go.sum | ||
handler.go | ||
json_handler.go | ||
relp_handler.go | ||
simplelog_test.go | ||
webhook_handler.go |
README.md
simplelog
simplelog is an opinionated logging package designed to facilitate easy and structured logging in Go applications with an absolute minimum of boilerplate.
The idea is that you can add a single import line which replaces the
stdlib log/slog
default handler, and solve the 90% case for logging.
Features
- if output is a tty, outputs pretty color logs
- if output is not a tty, outputs json
- supports delivering logs via tcp RELP (e.g. to remote rsyslog using imrelp)
- supports delivering each log message via a webhook
Installation
To use simplelog, first ensure your project is set up with Go modules:
go mod init your_project_name
Then, add SimpleLog to your project:
go get git.eeqj.de/sneak/go-simplelog
Usage
Below is an example of how to use SimpleLog in a Go application. This example is provided in the form of a main.go
file, which demonstrates logging at various levels using structured logging syntax.
package main
import (
"log/slog"
_ "git.eeqj.de/sneak/go-simplelog"
)
func main() {
// log structured data with slog as usual:
slog.Info("User login attempt", slog.String("user", "JohnDoe"), slog.Int("attempt", 3))
slog.Warn("Configuration mismatch", slog.String("expected", "config.json"), slog.String("found", "config.dev.json"))
slog.Error("Failed to save data", slog.String("reason", "permission denied"))
}