-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add xlog help utils and update go to go1.21
- Loading branch information
Showing
9 changed files
with
316 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,20 @@ | ||
module github.com/alimy/tryst | ||
|
||
go 1.18 | ||
go 1.21 | ||
|
||
require github.com/hashicorp/golang-lru/v2 v2.0.7 | ||
require ( | ||
github.com/bytedance/sonic v1.10.2 | ||
github.com/goccy/go-json v0.10.2 | ||
github.com/hashicorp/golang-lru/v2 v2.0.7 | ||
github.com/json-iterator/go v1.1.12 | ||
) | ||
|
||
require ( | ||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect | ||
github.com/chenzhuoyu/iasm v0.9.0 // indirect | ||
github.com/klauspost/cpuid/v2 v2.0.9 // indirect | ||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect | ||
github.com/modern-go/reflect2 v1.0.2 // indirect | ||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect | ||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,48 @@ | ||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= | ||
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= | ||
github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE= | ||
github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= | ||
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= | ||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= | ||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= | ||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= | ||
github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= | ||
github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= | ||
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= | ||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= | ||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= | ||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= | ||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= | ||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= | ||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= | ||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | ||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= | ||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= | ||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | ||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | ||
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | ||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | ||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= | ||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= | ||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= | ||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= | ||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= | ||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= | ||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// Copyright 2017 Bo-Yi Wu. All rights reserved. | ||
// Use of this source code is governed by a MIT style | ||
// license that can be found in the LICENSE file. | ||
|
||
//go:build go_json | ||
// +build go_json | ||
|
||
package json | ||
|
||
import json "github.com/goccy/go-json" | ||
|
||
var ( | ||
// Marshal is exported by gin/json package. | ||
Marshal = json.Marshal | ||
// Unmarshal is exported by gin/json package. | ||
Unmarshal = json.Unmarshal | ||
// MarshalIndent is exported by gin/json package. | ||
MarshalIndent = json.MarshalIndent | ||
// NewDecoder is exported by gin/json package. | ||
NewDecoder = json.NewDecoder | ||
// NewEncoder is exported by gin/json package. | ||
NewEncoder = json.NewEncoder | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// Copyright 2017 Bo-Yi Wu. All rights reserved. | ||
// Use of this source code is governed by a MIT style | ||
// license that can be found in the LICENSE file. | ||
|
||
//go:build !jsoniter && !go_json && !(sonic && avx && (linux || windows || darwin) && amd64) | ||
// +build !jsoniter | ||
// +build !go_json | ||
// +build !sonic !avx !linux,!windows,!darwin !amd64 | ||
|
||
package json | ||
|
||
import "encoding/json" | ||
|
||
var ( | ||
// Marshal is exported by gin/json package. | ||
Marshal = json.Marshal | ||
// Unmarshal is exported by gin/json package. | ||
Unmarshal = json.Unmarshal | ||
// MarshalIndent is exported by gin/json package. | ||
MarshalIndent = json.MarshalIndent | ||
// NewDecoder is exported by gin/json package. | ||
NewDecoder = json.NewDecoder | ||
// NewEncoder is exported by gin/json package. | ||
NewEncoder = json.NewEncoder | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// Copyright 2017 Bo-Yi Wu. All rights reserved. | ||
// Use of this source code is governed by a MIT style | ||
// license that can be found in the LICENSE file. | ||
|
||
//go:build jsoniter | ||
// +build jsoniter | ||
|
||
package json | ||
|
||
import jsoniter "github.com/json-iterator/go" | ||
|
||
var ( | ||
json = jsoniter.ConfigCompatibleWithStandardLibrary | ||
// Marshal is exported by gin/json package. | ||
Marshal = json.Marshal | ||
// Unmarshal is exported by gin/json package. | ||
Unmarshal = json.Unmarshal | ||
// MarshalIndent is exported by gin/json package. | ||
MarshalIndent = json.MarshalIndent | ||
// NewDecoder is exported by gin/json package. | ||
NewDecoder = json.NewDecoder | ||
// NewEncoder is exported by gin/json package. | ||
NewEncoder = json.NewEncoder | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
// Copyright 2022 Gin Core Team. All rights reserved. | ||
// Use of this source code is governed by a MIT style | ||
// license that can be found in the LICENSE file. | ||
|
||
//go:build sonic && avx && (linux || windows || darwin) && amd64 | ||
// +build sonic | ||
// +build avx | ||
// +build linux windows darwin | ||
// +build amd64 | ||
|
||
package json | ||
|
||
import "github.com/bytedance/sonic" | ||
|
||
var ( | ||
json = sonic.ConfigStd | ||
// Marshal is exported by gin/json package. | ||
Marshal = json.Marshal | ||
// Unmarshal is exported by gin/json package. | ||
Unmarshal = json.Unmarshal | ||
// MarshalIndent is exported by gin/json package. | ||
MarshalIndent = json.MarshalIndent | ||
// NewDecoder is exported by gin/json package. | ||
NewDecoder = json.NewDecoder | ||
// NewEncoder is exported by gin/json package. | ||
NewEncoder = json.NewEncoder | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
// Copyright 2024 Michael Li <alimy@gility.net>. All rights reserved. | ||
// Use of this source code is governed by Apache License 2.0 that | ||
// can be found in the LICENSE file. | ||
|
||
package xlog | ||
|
||
import ( | ||
"context" | ||
"log/slog" | ||
) | ||
|
||
var ( | ||
defaultLogger *slog.Logger | ||
|
||
// With calls Logger.With on the default logger. | ||
With func(args ...any) *slog.Logger | ||
|
||
// WithGroup Logger.WithGroup on the default logger. | ||
WithGroup func(name string) *slog.Logger | ||
|
||
// Debug calls Logger.Debug on the default logger. | ||
Debug func(msg string, args ...any) | ||
|
||
// DebugContext calls Logger.DebugContext on the default logger. | ||
DebugContext func(ctx context.Context, msg string, args ...any) | ||
|
||
// Info calls Logger.Info on the default logger. | ||
Info func(msg string, args ...any) | ||
|
||
// InfoContext calls Logger.InfoContext on the default logger. | ||
InfoContext func(ctx context.Context, msg string, args ...any) | ||
|
||
// Warn calls Logger.Warn on the default logger. | ||
Warn func(msg string, args ...any) | ||
|
||
// WarnContext calls Logger.WarnContext on the default logger. | ||
WarnContext func(ctx context.Context, msg string, args ...any) | ||
|
||
// Error calls Logger.Error on the default logger. | ||
Error func(msg string, args ...any) | ||
|
||
// ErrorContext calls Logger.ErrorContext on the default logger. | ||
ErrorContext func(ctx context.Context, msg string, args ...any) | ||
|
||
// Log calls Logger.Log on the default logger. | ||
Log func(ctx context.Context, level slog.Level, msg string, args ...any) | ||
|
||
// LogAttrs calls Logger.LogAttrs on the default logger. | ||
LogAttrs func(ctx context.Context, level slog.Level, msg string, attrs ...slog.Attr) | ||
) | ||
|
||
func init() { | ||
SetLogger(slog.Default()) | ||
} | ||
|
||
// MyLogger returns the default Logger. | ||
func MyLogger() *slog.Logger { | ||
return defaultLogger | ||
} | ||
|
||
// SetLogger makes l the default Logger. | ||
func SetLogger(l *slog.Logger) { | ||
if l == nil { | ||
return | ||
} | ||
defaultLogger = l | ||
|
||
With, WithGroup = l.With, l.WithGroup | ||
Debug, DebugContext = l.Debug, l.DebugContext | ||
Info, InfoContext = l.Info, l.InfoContext | ||
Warn, WarnContext = l.Warn, l.WarnContext | ||
Error, ErrorContext = l.Error, l.ErrorContext | ||
Log, LogAttrs = l.Log, l.LogAttrs | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
package xlog_test | ||
|
||
import ( | ||
"bytes" | ||
"context" | ||
"log/slog" | ||
"regexp" | ||
"strings" | ||
"testing" | ||
"time" | ||
|
||
"github.com/alimy/tryst/xlog" | ||
) | ||
|
||
const timeRE = `\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}(Z|[+-]\d{2}:\d{2})` | ||
|
||
func TestLogTextHandler(t *testing.T) { | ||
ctx := context.Background() | ||
var buf bytes.Buffer | ||
|
||
l := slog.New(slog.NewTextHandler(&buf, nil)) | ||
xlog.SetLogger(l) | ||
|
||
check := func(want string) { | ||
t.Helper() | ||
if want != "" { | ||
want = "time=" + timeRE + " " + want | ||
} | ||
checkLogOutput(t, buf.String(), want) | ||
buf.Reset() | ||
} | ||
|
||
l.Info("msg", "a", 1, "b", 2) | ||
check(`level=INFO msg=msg a=1 b=2`) | ||
|
||
// By default, debug messages are not printed. | ||
l.Debug("bg", slog.Int("a", 1), "b", 2) | ||
check("") | ||
|
||
l.Warn("w", slog.Duration("dur", 3*time.Second)) | ||
check(`level=WARN msg=w dur=3s`) | ||
|
||
l.Error("bad", "a", 1) | ||
check(`level=ERROR msg=bad a=1`) | ||
|
||
l.Log(ctx, slog.LevelWarn+1, "w", slog.Int("a", 1), slog.String("b", "two")) | ||
check(`level=WARN\+1 msg=w a=1 b=two`) | ||
|
||
l.LogAttrs(ctx, slog.LevelInfo+1, "a b c", slog.Int("a", 1), slog.String("b", "two")) | ||
check(`level=INFO\+1 msg="a b c" a=1 b=two`) | ||
|
||
l.Info("info", "a", []slog.Attr{slog.Int("i", 1)}) | ||
check(`level=INFO msg=info a.i=1`) | ||
|
||
l.Info("info", "a", slog.GroupValue(slog.Int("i", 1))) | ||
check(`level=INFO msg=info a.i=1`) | ||
} | ||
|
||
func checkLogOutput(t *testing.T, got, wantRegexp string) { | ||
t.Helper() | ||
got = clean(got) | ||
wantRegexp = "^" + wantRegexp + "$" | ||
matched, err := regexp.MatchString(wantRegexp, got) | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
if !matched { | ||
t.Errorf("\ngot %s\nwant %s", got, wantRegexp) | ||
} | ||
} | ||
|
||
// clean prepares log output for comparison. | ||
func clean(s string) string { | ||
if len(s) > 0 && s[len(s)-1] == '\n' { | ||
s = s[:len(s)-1] | ||
} | ||
return strings.ReplaceAll(s, "\n", "~") | ||
} |