diff --git a/README.md b/README.md index c2e5c4f..d94185b 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ The following libraries are being tested: - [Slog](https://pkg.go.dev/log/slog) - [SlogZap](https://github.com/uber-go/zap/tree/master/exp/zapslog) (Slog with Zap backend) +- [SlogZerolog](https://github.com/rs/zerolog#integration-with-logslog) (Slog with zerolog backend) - [Phuslog](https://github.com/phuslu/log) - [Log15](https://github.com/inconshreveable/log15) - [Logf](https://github.com/zerodha/logf) diff --git a/go.mod b/go.mod index b8f48ae..5ca120e 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module github.com/betterstack-community/go-logging-benchmarks -go 1.21 +go 1.23 require ( github.com/apex/log v1.9.0 github.com/inconshreveable/log15 v2.16.0+incompatible - github.com/phuslu/log v1.0.99 - github.com/rs/zerolog v1.30.0 + github.com/phuslu/log v1.0.126 + github.com/rs/zerolog v1.35.1 github.com/sirupsen/logrus v1.9.3 github.com/zerodha/logf v0.5.5 go.uber.org/multierr v1.10.0 @@ -16,9 +16,9 @@ require ( require ( github.com/go-stack/stack v1.8.1 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/pkg/errors v0.9.1 // indirect - golang.org/x/sys v0.12.0 // indirect + golang.org/x/sys v0.29.0 // indirect golang.org/x/term v0.12.0 // indirect ) diff --git a/go.sum b/go.sum index 0ff4278..78648ae 100644 --- a/go.sum +++ b/go.sum @@ -7,7 +7,6 @@ github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -16,7 +15,6 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -31,29 +29,27 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/phuslu/log v1.0.99 h1:DcsYN7ONwGjJ+kjx0QacDq4p90xYFhcY6kRaMvjo9Fg= github.com/phuslu/log v1.0.99/go.mod h1:F8osGJADo5qLK/0F88djWwdyoZZ9xDJQL1HYRHFEkS0= +github.com/phuslu/log v1.0.126 h1:koK+Rl2raYhvEoEff9tbi7lxuENM8pJIRESiVSUPPdA= +github.com/phuslu/log v1.0.126/go.mod h1:F8osGJADo5qLK/0F88djWwdyoZZ9xDJQL1HYRHFEkS0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= -github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= +github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI= +github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -93,13 +89,10 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/setup_test.go b/setup_test.go index 5621e90..69dcc36 100644 --- a/setup_test.go +++ b/setup_test.go @@ -101,6 +101,9 @@ var loggers = []logBenchmark{ &zapBench{}, &zapSugarBench{}, &slogBench{}, + &slogZerologBench{}, + &slogPhuslogLoggerBench{}, + &slogPhuslogHandlerBench{}, &slogZapBench{}, &apexBench{}, &logrusBench{}, diff --git a/slog_phuslog_handler_test.go b/slog_phuslog_handler_test.go new file mode 100644 index 0000000..331fb44 --- /dev/null +++ b/slog_phuslog_handler_test.go @@ -0,0 +1,38 @@ +package bench + +import ( + "io" + "log/slog" + + "github.com/phuslu/log" +) + +type slogPhuslogHandlerBench struct { + slogBench +} + +func newSlogPhuslogHandler(w io.Writer) *slog.Logger { + h := log.SlogNewJSONHandler(w, &slog.HandlerOptions{}) + return slog.New(h) +} + +func newSlogPhuslogHandlerWithCtx(w io.Writer, attr []slog.Attr) *slog.Logger { + h := log.SlogNewJSONHandler(w, &slog.HandlerOptions{}).WithAttrs(attr) + return slog.New(h) +} + +func (b *slogPhuslogHandlerBench) new(w io.Writer) logBenchmark { + return &slogBench{ + l: newSlogPhuslogHandler(w), + } +} + +func (b *slogPhuslogHandlerBench) newWithCtx(w io.Writer) logBenchmark { + return &slogBench{ + l: newSlogPhuslogHandlerWithCtx(w, slogAttrs()), + } +} + +func (b *slogPhuslogHandlerBench) name() string { + return "SlogPhuslogHandler" +} diff --git a/slog_phuslog_logger_test.go b/slog_phuslog_logger_test.go new file mode 100644 index 0000000..3941b65 --- /dev/null +++ b/slog_phuslog_logger_test.go @@ -0,0 +1,36 @@ +package bench + +import ( + "io" + "log/slog" +) + +type slogPhuslogLoggerBench struct { + slogBench +} + +func newSlogPhuslogLogger(w io.Writer) *slog.Logger { + l := newPhusLog(w) + return l.Slog() +} + +func newSlogPhuslogLoggerWithCtx(w io.Writer, attr []slog.Attr) *slog.Logger { + l := newPhusLog(w) + return slog.New(l.Slog().Handler().WithAttrs(attr)) +} + +func (b *slogPhuslogLoggerBench) new(w io.Writer) logBenchmark { + return &slogBench{ + l: newSlogPhuslogLogger(w), + } +} + +func (b *slogPhuslogLoggerBench) newWithCtx(w io.Writer) logBenchmark { + return &slogBench{ + l: newSlogPhuslogLoggerWithCtx(w, slogAttrs()), + } +} + +func (b *slogPhuslogLoggerBench) name() string { + return "SlogPhuslogLoggerWrapper" +} diff --git a/slog_zerolog_test.go b/slog_zerolog_test.go new file mode 100644 index 0000000..0aae5d8 --- /dev/null +++ b/slog_zerolog_test.go @@ -0,0 +1,40 @@ +package bench + +import ( + "io" + "log/slog" + + "github.com/rs/zerolog" +) + +type slogZerologBench struct { + slogBench +} + +func newSlogZerolog(w io.Writer) *slog.Logger { + l := newZerolog(w) + h := zerolog.NewSlogHandler(l) + return slog.New(h) +} + +func newSlogZerologWithCtx(w io.Writer, attr []slog.Attr) *slog.Logger { + l := newZerolog(w) + h := zerolog.NewSlogHandler(l).WithAttrs(attr) + return slog.New(h) +} + +func (b *slogZerologBench) new(w io.Writer) logBenchmark { + return &slogBench{ + l: newSlogZerolog(w), + } +} + +func (b *slogZerologBench) newWithCtx(w io.Writer) logBenchmark { + return &slogBench{ + l: newSlogZerologWithCtx(w, slogAttrs()), + } +} + +func (b *slogZerologBench) name() string { + return "SlogZerolog" +}