log icon indicating copy to clipboard operation
log copied to clipboard

Indent all keyvals

Open CreativeCreature opened this issue 10 months ago • 3 comments

Hi, thanks a lot for creating this package!

I have been playing around with it a bit today, but I have not been able to find a way that ensures that the keyvals always gets indented.

To illustrate what I mean, I've created this program:

package main

import (
	"os"

	"github.com/charmbracelet/log"
)

const (
	userId  = "31c572eb-abb8-4907-b4ad-9c66799c4895"
	orderId = "6b3508f9-cfbe-41d7-8c4d-d4c399bee604"
)

func main() {
	logger := log.New(os.Stdout)
	logger.Info("Successfully placed order.",
		"user_id", userId,
		"order_id", orderId,
	)
}

Running itprints the message as a single line like this:

Screenshot 2024-04-16 at 20 45 25

However, I looked a bit at the code, and saw that there was an indentation separator. Is there a way to ensure that it gets applied to all keyvals without having to add newlines to each value like this:

logger.Info("Successfully placed order.",
	"user_id", userId+"\n",
	"order_id", orderId+"\n",
)
Screenshot 2024-04-16 at 20 49 01

CreativeCreature avatar Apr 16 '24 18:04 CreativeCreature

Perhaps we can add an option that allows you to do something like?

log.New().Multiline(true)

On the other hand @creativecreature, is there a particular reason you want to avoid adding new lines if that gives you the desired result?

maaslalani avatar Apr 26 '24 16:04 maaslalani

I think that your proposed option would be great! I'm currently using a similar approach, though it does become a little tedious over time. The new lines does not really give me the result I'm after, but it's better than having a really long line! With a Multiline option I think both the aesthetics and readability would be improved if the key and value would be aligned on the same line

CreativeCreature avatar Apr 27 '24 11:04 CreativeCreature

Yessssss 🎉 Just chiming in here to say that this would be a huuuuuge usability win. Especially for programs which have large traces with keyvals which end-users have to read through. I've just migrated a large project to use this package, was pretty painless!

decentral1se avatar Jul 07 '24 22:07 decentral1se