handler_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package logger
  2. import (
  3. "errors"
  4. "io"
  5. "log/slog"
  6. "testing"
  7. "time"
  8. )
  9. var handlerBenchmarkMsg = "test message"
  10. var handlerBenchmarkAttrs = []any{
  11. slog.String("string", "value"),
  12. slog.Int("int", -100),
  13. slog.Uint64("uint64", 200),
  14. slog.Float64("float64", 3.14),
  15. slog.Bool("bool", true),
  16. slog.Time("time", time.Now()),
  17. slog.Duration("duration", time.Minute+time.Second),
  18. slog.Group("group", "group_key", "group_value"),
  19. slog.Any("err", errors.New("error value")),
  20. slog.Any("any", struct {
  21. Field1 string
  22. Field2 int
  23. }{"value", 42}),
  24. }
  25. func BenchmarkFormatterPretty(b *testing.B) {
  26. testHandler := NewHandler(io.Discard, &Config{
  27. Level: slog.LevelDebug,
  28. Format: FormatPretty,
  29. })
  30. testLogger := slog.New(testHandler)
  31. b.ResetTimer()
  32. for i := 0; i < b.N; i++ {
  33. testLogger.Info(
  34. handlerBenchmarkMsg,
  35. handlerBenchmarkAttrs...,
  36. )
  37. }
  38. }
  39. func BenchmarkFormatterStructured(b *testing.B) {
  40. testHandler := NewHandler(io.Discard, &Config{
  41. Level: slog.LevelDebug,
  42. Format: FormatStructured,
  43. })
  44. testLogger := slog.New(testHandler)
  45. b.ResetTimer()
  46. for i := 0; i < b.N; i++ {
  47. testLogger.Info(
  48. handlerBenchmarkMsg,
  49. handlerBenchmarkAttrs...,
  50. )
  51. }
  52. }
  53. func BenchmarkFormatterJSON(b *testing.B) {
  54. testHandler := NewHandler(io.Discard, &Config{
  55. Level: slog.LevelDebug,
  56. Format: FormatJSON,
  57. })
  58. testLogger := slog.New(testHandler)
  59. b.ResetTimer()
  60. for i := 0; i < b.N; i++ {
  61. testLogger.Info(
  62. handlerBenchmarkMsg,
  63. handlerBenchmarkAttrs...,
  64. )
  65. }
  66. }
  67. func BenchmarkNativeText(b *testing.B) {
  68. testHandler := slog.NewTextHandler(io.Discard, &slog.HandlerOptions{Level: slog.LevelDebug})
  69. testLogger := slog.New(testHandler)
  70. b.ResetTimer()
  71. for i := 0; i < b.N; i++ {
  72. testLogger.Info(
  73. handlerBenchmarkMsg,
  74. handlerBenchmarkAttrs...,
  75. )
  76. }
  77. }
  78. func BenchmarkNativeJSON(b *testing.B) {
  79. testHandler := slog.NewJSONHandler(io.Discard, &slog.HandlerOptions{Level: slog.LevelDebug})
  80. testLogger := slog.New(testHandler)
  81. b.ResetTimer()
  82. for i := 0; i < b.N; i++ {
  83. testLogger.Info(
  84. handlerBenchmarkMsg,
  85. handlerBenchmarkAttrs...,
  86. )
  87. }
  88. }