Skip to content

Commit

Permalink
Fix alloc and add bench results in readme
Browse files Browse the repository at this point in the history
  • Loading branch information
phsym committed Aug 16, 2023
1 parent 6a8ddfd commit b0d3bbe
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
33 changes: 30 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# console-slog

[![godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/phsym/console-slog) [![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/phsym/console-slog/master/LICENSE) [![Build](https://github.com/phsym/console-slog/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/phsym/zeroslog/actions/workflows/go.yml)
[![Go Reference](https://pkg.go.dev/badge/github.com/phsym/console-slog.svg)](https://pkg.go.dev/github.com/phsym/console-slog) [![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/phsym/console-slog/master/LICENSE) [![Build](https://github.com/phsym/console-slog/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/phsym/zeroslog/actions/workflows/go.yml)

A handler for slog that prints colorized logs, similar to zerolog's console writer output
A handler for slog that prints colorized logs, similar to zerolog's console writer output, but without sacrificing performances.

## Example
```go
Expand Down Expand Up @@ -40,4 +40,31 @@ When setting `console.HandlerOptions.AddSource` to `true`:
```go
console.NewHandler(os.Stderr, &console.HandlerOptions{Level: slog.LevelDebug, AddSource: true})
```
![output-with-source](./doc/img/output-with-source.png)
![output-with-source](./doc/img/output-with-source.png)

## Performances
See [benchmark file](./bench_test.go) for details.

The handler itself performs quite well compared to std-lib's handlers. It does no allocation:
```
goos: linux
goarch: amd64
pkg: github.com/phsym/console-slog
cpu: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
BenchmarkHandlers/dummy-4 128931026 8.732 ns/op 0 B/op 0 allocs/op
BenchmarkHandlers/console-4 849837 1294 ns/op 0 B/op 0 allocs/op
BenchmarkHandlers/std-text-4 542583 2097 ns/op 4 B/op 2 allocs/op
BenchmarkHandlers/std-json-4 583784 1911 ns/op 120 B/op 3 allocs/op
```

However, the go 1.21.0 `slog.Logger` adds some overhead:
```
goos: linux
goarch: amd64
pkg: github.com/phsym/console-slog
cpu: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
BenchmarkLoggers/dummy-4 1239873 893.2 ns/op 128 B/op 1 allocs/op
BenchmarkLoggers/console-4 483354 2338 ns/op 128 B/op 1 allocs/op
BenchmarkLoggers/std-text-4 368828 3141 ns/op 132 B/op 3 allocs/op
BenchmarkLoggers/std-json-4 393322 2909 ns/op 248 B/op 4 allocs/op
```
4 changes: 2 additions & 2 deletions handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
)

var bufferPool = &sync.Pool{
New: func() any { return buffer{} },
New: func() any { return new(buffer) },
}

var cwd, _ = os.Getwd()
Expand Down Expand Up @@ -60,7 +60,7 @@ func (h *ConsoleHandler) Enabled(_ context.Context, l slog.Level) bool {

// Handle implements slog.Handler.
func (h *ConsoleHandler) Handle(_ context.Context, rec slog.Record) error {
buf := bufferPool.Get().(buffer)
buf := bufferPool.Get().(*buffer)

buf.writeTimestamp(rec.Time)
buf.writeLevel(rec.Level)
Expand Down

0 comments on commit b0d3bbe

Please sign in to comment.