Comments (3)
Yes, this would definitely break with the conventions of TextHandler. Although what you describe is the default behavior of the JSONHandler.
However, I think there is a good equivalent solution to zerolog, the slog.LogValuer
.
func (p Person) LogValue() slog.Value {
return slog.GroupValue(
slog.String("name", p.Name),
slog.Int("age", A.age))
}
The output format is a little different though. ..., "person", p,...
would become person.name=John person.age=30
from tint.
func (p Person) LogValue() slog.Value { return slog.GroupValue( slog.String("name", p.Name), slog.Int("age", A.age)) }
Actually, that's perfect and honestly nicer output than the JSON output as it is more human friendly. Thanks so much for the reply and tip, I wasn't aware of this method.
I'm happy to close this issue 😄
Fotis
from tint.
Just to give you an idea of how I accomplished this locally while testing:
handler.go
...
func appendValue(buf *buffer, v slog.Value, quote bool) {
...
- if tm, ok := v.Any().(encoding.TextMarshaler); ok {
- data, err := tm.MarshalText()
- if err != nil {
- break
- }
- appendString(buf, string(data), quote)
- break
+ if jm, err := json.Marshal(v.Any()); err == nil {
+ appendString(buf, string(jm), false)
+ } else {
+ appendString(buf, fmt.Sprintf("%+v", v.Any()), false)
}
- appendString(buf, fmt.Sprint(v.Any()), quote)
...
And my example:
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
tintOptions := tint.Options{
Level: slog.LevelDebug,
TimeFormat: time.DateTime,
}
slog.SetDefault(slog.New(tintOptions.NewHandler(os.Stdout)))
person := Person{
Name: "John",
Age: 30,
}
slog.Info("This is the person", slog.Any("person", person))
}
Resulting in the following output:
As compared to:
And slog's TextHandler
looks like this:
Notice they've also adopted %+v
too so it may be worth switching that style either way 😄
Cheers
Fotis
from tint.
Related Issues (20)
- TimeFormat does not appear to take effect HOT 1
- Allow user to set custom time format HOT 1
- More log levels please HOT 3
- Adding a replace attribute function broke feature HOT 3
- Can I set custom level tags? HOT 2
- ReplaceAttrs incompatible with slog HOT 1
- feat request: colorize the message HOT 2
- bug: nested group name was wrong in `Err` attribute HOT 2
- Sorting attrs? HOT 3
- isatty no longer necessary HOT 1
- Is it possible to add a custom time location? HOT 1
- Still colorize level when replaceAttr exist HOT 5
- Fields names are not printed for C structures HOT 4
- Wrong colors somehow HOT 1
- Log files HOT 2
- Colorized attribute HOT 2
- Test TestReplaceAttr fails sometimes HOT 1
- Custom log level names with color HOT 3
- TimeFormat can lead to misaligned output HOT 2
- Log level change HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tint.