Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Switch to log/slog for logging #3544

Merged
merged 2 commits into from
Feb 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ linters:
- bidichk
- bodyclose
- containedctx
- contextcheck
- decorder
- dogsled
- dupl
- dupword
- durationcheck
- errcheck
Expand Down Expand Up @@ -79,8 +77,10 @@ linters:
- zerologlint
disable:
- asasalint
- contextcheck
- cyclop
- depguard
- dupl
- exhaustive
- exhaustruct
- funlen
Expand Down
2 changes: 1 addition & 1 deletion assets/chezmoi.io/docs/developer/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ chezmoi uses multiple levels of testing:
`internal/chezmoi/*_test.go`.

2. Filesystem integration tests, using `testing` and
[`github.com/twpayne/go-vfs/v5`](https://pkg.go.dev/github.com/twpayne/go-vfs/v4),
[`github.com/twpayne/go-vfs/v5`](https://pkg.go.dev/github.com/twpayne/go-vfs/v5),
test chezmoi's effects on the filesystem. This include some tests in
`internal/chezmoi/*_test.go`, and higher level command tests in
`internal/cmd/*cmd_test.go`.
Expand Down
5 changes: 2 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,11 @@ require (
github.com/muesli/termenv v0.15.2
github.com/pelletier/go-toml/v2 v2.1.1
github.com/rogpeppe/go-internal v1.12.0
github.com/rs/zerolog v1.32.0
github.com/sergi/go-diff v1.1.0
github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.5
github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a
github.com/twpayne/go-pinentry v0.3.0
github.com/twpayne/go-pinentry/v3 v3.0.1
github.com/twpayne/go-shell v0.4.0
github.com/twpayne/go-vfs/v5 v5.0.1
github.com/twpayne/go-xdg/v6 v6.1.2
Expand Down Expand Up @@ -133,8 +132,8 @@ require (
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/pjbgf/sha1cd v0.3.0 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rivo/uniseg v0.4.6 // indirect
github.com/rs/zerolog v1.32.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -423,8 +423,8 @@ github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a h1:SJy1Pu0eH1C29X
github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a/go.mod h1:DFSS3NAGHthKo1gTlmEcSBiZrRJXi28rLNd/1udP1c8=
github.com/twpayne/go-expect v0.0.1 h1:cRJ552FIdQzs4z98Q2OLQsGLSbkB7Xpm/IU6cyQ6mUM=
github.com/twpayne/go-expect v0.0.1/go.mod h1:+ffr+YtUt8ifebyvRQ3NhVTiLch/HnfxsAQqO5LeXss=
github.com/twpayne/go-pinentry v0.3.0 h1:Rr+fEOZXmeItOb4thjeVaBWJKB9Xa/eojolycyF/26c=
github.com/twpayne/go-pinentry v0.3.0/go.mod h1:iOIZD+9np/2V24OdCGos7Y1/xX90wc6VEAZsgb+r9D4=
github.com/twpayne/go-pinentry/v3 v3.0.1 h1:rop+jK2x2CT5/Bwpf0EYMl0DVpDWc7IQYlNn8hdOOvM=
github.com/twpayne/go-pinentry/v3 v3.0.1/go.mod h1:l8V/3baYFXtN5NLMgFQe2FFPlGdZRUaoCW61Hxs+1oA=
github.com/twpayne/go-shell v0.4.0 h1:RAAMbjEj7mcwDdwC7SiFHGUKR+WDAURU6mnyd3r2p2E=
github.com/twpayne/go-shell v0.4.0/go.mod h1:MP3aUA0TQ3IGoJc15ahjb+7A7wZH4NeGrvLZ/aFQsHc=
github.com/twpayne/go-vfs/v4 v4.3.0 h1:rTqFzzOQ/6ESKTSiwVubHlCBedJDOhQyVSnw8rQNZhU=
Expand Down
9 changes: 5 additions & 4 deletions internal/chezmoi/ageencryption.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package chezmoi
import (
"bytes"
"io"
"log/slog"
"os"
"os/exec"

Expand Down Expand Up @@ -42,7 +43,7 @@ func (e *AgeEncryption) Decrypt(ciphertext []byte) ([]byte, error) {
cmd := exec.Command(e.Command, append(e.decryptArgs(), e.Args...)...) //nolint:gosec
cmd.Stdin = bytes.NewReader(ciphertext)
cmd.Stderr = os.Stderr
return chezmoilog.LogCmdOutput(cmd)
return chezmoilog.LogCmdOutput(slog.Default(), cmd)
}

// DecryptToFile implements Encryption.DecryptToFile.
Expand All @@ -59,7 +60,7 @@ func (e *AgeEncryption) DecryptToFile(plaintextAbsPath AbsPath, ciphertext []byt
cmd := exec.Command(e.Command, args...) //nolint:gosec
cmd.Stdin = bytes.NewReader(ciphertext)
cmd.Stderr = os.Stderr
return chezmoilog.LogCmdRun(cmd)
return chezmoilog.LogCmdRun(slog.Default(), cmd)
}

// Encrypt implements Encryption.Encrypt.
Expand All @@ -71,7 +72,7 @@ func (e *AgeEncryption) Encrypt(plaintext []byte) ([]byte, error) {
cmd := exec.Command(e.Command, append(e.encryptArgs(), e.Args...)...) //nolint:gosec
cmd.Stdin = bytes.NewReader(plaintext)
cmd.Stderr = os.Stderr
return chezmoilog.LogCmdOutput(cmd)
return chezmoilog.LogCmdOutput(slog.Default(), cmd)
}

// EncryptFile implements Encryption.EncryptFile.
Expand All @@ -87,7 +88,7 @@ func (e *AgeEncryption) EncryptFile(plaintextAbsPath AbsPath) ([]byte, error) {
args := append(append(e.encryptArgs(), e.Args...), plaintextAbsPath.String())
cmd := exec.Command(e.Command, args...) //nolint:gosec
cmd.Stderr = os.Stderr
return chezmoilog.LogCmdOutput(cmd)
return chezmoilog.LogCmdOutput(slog.Default(), cmd)
}

// EncryptedSuffix implements Encryption.EncryptedSuffix.
Expand Down
49 changes: 25 additions & 24 deletions internal/chezmoi/attr.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ package chezmoi

import (
"io/fs"
"log/slog"
"strings"

"github.com/rs/zerolog"
)

// A SourceFileTargetType is a the type of a target represented by a file in the
Expand Down Expand Up @@ -99,15 +98,16 @@ func parseDirAttr(name string) DirAttr {
}
}

// MarshalZerologObject implements
// github.com/rs/zerolog.ObjectMarshaler.MarshalZerologObject.
func (da DirAttr) MarshalZerologObject(e *zerolog.Event) {
e.Str("TargetName", da.TargetName)
e.Bool("Exact", da.Exact)
e.Bool("External", da.External)
e.Bool("Private", da.Private)
e.Bool("ReadOnly", da.ReadOnly)
e.Bool("Remove", da.Remove)
// LogValue implements log/slog.LogValuer.LogValue.
func (da DirAttr) LogValue() slog.Value {
return slog.GroupValue(
slog.String("TargetName", da.TargetName),
slog.Bool("Exact", da.Exact),
slog.Bool("External", da.External),
slog.Bool("Private", da.Private),
slog.Bool("ReadOnly", da.ReadOnly),
slog.Bool("Remove", da.Remove),
)
}

// SourceName returns da's source name.
Expand Down Expand Up @@ -246,19 +246,20 @@ func parseFileAttr(sourceName, encryptedSuffix string) FileAttr {
}
}

// MarshalZerologObject implements
// github.com/rs/zerolog.LogObjectMarshaler.MarshalZerologObject.
func (fa FileAttr) MarshalZerologObject(e *zerolog.Event) {
e.Str("TargetName", fa.TargetName)
e.Str("Type", sourceFileTypeStrs[fa.Type])
e.Str("Condition", string(fa.Condition))
e.Bool("Empty", fa.Empty)
e.Bool("Encrypted", fa.Encrypted)
e.Bool("Executable", fa.Executable)
e.Int("Order", int(fa.Order))
e.Bool("Private", fa.Private)
e.Bool("ReadOnly", fa.ReadOnly)
e.Bool("Template", fa.Template)
// LogValue implements log/slog.LogValuer.LogValue.
func (fa FileAttr) LogValue() slog.Value {
return slog.GroupValue(
slog.String("TargetName", fa.TargetName),
slog.String("Type", sourceFileTypeStrs[fa.Type]),
slog.String("Condition", string(fa.Condition)),
slog.Bool("Empty", fa.Empty),
slog.Bool("Encrypted", fa.Encrypted),
slog.Bool("Executable", fa.Executable),
slog.Int("Order", int(fa.Order)),
slog.Bool("Private", fa.Private),
slog.Bool("ReadOnly", fa.ReadOnly),
slog.Bool("Template", fa.Template),
)
}

// SourceName returns fa's source name.
Expand Down
12 changes: 0 additions & 12 deletions internal/chezmoi/chezmoi_test.go
Original file line number Diff line number Diff line change
@@ -1,27 +1,15 @@
package chezmoi

import (
"os"
"strings"
"testing"

"github.com/alecthomas/assert/v2"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/rs/zerolog/pkgerrors"
"github.com/twpayne/go-vfs/v5"

"github.com/twpayne/chezmoi/v2/internal/chezmoitest"
)

func init() {
log.Logger = log.Output(zerolog.ConsoleWriter{
Out: os.Stderr,
NoColor: true,
})
zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack //nolint:reassign
}

func TestEtcHostsFQDNHostname(t *testing.T) {
for _, tc := range []struct {
name string
Expand Down
38 changes: 19 additions & 19 deletions internal/chezmoi/debugencryption.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package chezmoi

import (
"github.com/rs/zerolog"
"log/slog"

"github.com/twpayne/chezmoi/v2/internal/chezmoilog"
)

// A DebugEncryption logs all calls to an Encryption.
type DebugEncryption struct {
logger *zerolog.Logger
logger *slog.Logger
encryption Encryption
}

// NewDebugEncryption returns a new DebugEncryption that logs methods on
// encryption to logger.
func NewDebugEncryption(encryption Encryption, logger *zerolog.Logger) *DebugEncryption {
func NewDebugEncryption(encryption Encryption, logger *slog.Logger) *DebugEncryption {
return &DebugEncryption{
logger: logger,
encryption: encryption,
Expand All @@ -24,40 +24,40 @@ func NewDebugEncryption(encryption Encryption, logger *zerolog.Logger) *DebugEnc
// Decrypt implements Encryption.Decrypt.
func (e *DebugEncryption) Decrypt(ciphertext []byte) ([]byte, error) {
plaintext, err := e.encryption.Decrypt(ciphertext)
e.logger.Err(err).
Bytes("ciphertext", chezmoilog.Output(ciphertext, err)).
Bytes("plaintext", chezmoilog.Output(plaintext, err)).
Msg("Decrypt")
chezmoilog.InfoOrError(e.logger, "Decrypt", err,
chezmoilog.FirstFewBytes("ciphertext", ciphertext),
chezmoilog.FirstFewBytes("plaintext", plaintext),
)
return plaintext, err
}

// DecryptToFile implements Encryption.DecryptToFile.
func (e *DebugEncryption) DecryptToFile(plaintextAbsPath AbsPath, ciphertext []byte) error {
err := e.encryption.DecryptToFile(plaintextAbsPath, ciphertext)
e.logger.Err(err).
Stringer("plaintextAbsPath", plaintextAbsPath).
Bytes("ciphertext", chezmoilog.Output(ciphertext, err)).
Msg("DecryptToFile")
chezmoilog.InfoOrError(e.logger, "DecryptToFile", err,
chezmoilog.Stringer("plaintextAbsPath", plaintextAbsPath),
chezmoilog.FirstFewBytes("ciphertext", ciphertext),
)
return err
}

// Encrypt implements Encryption.Encrypt.
func (e *DebugEncryption) Encrypt(plaintext []byte) ([]byte, error) {
ciphertext, err := e.encryption.Encrypt(plaintext)
e.logger.Err(err).
Bytes("plaintext", chezmoilog.Output(plaintext, err)).
Bytes("ciphertext", chezmoilog.Output(ciphertext, err)).
Msg("Encrypt")
chezmoilog.InfoOrError(e.logger, "Encrypt", err,
chezmoilog.FirstFewBytes("plaintext", plaintext),
chezmoilog.FirstFewBytes("ciphertext", ciphertext),
)
return ciphertext, err
}

// EncryptFile implements Encryption.EncryptFile.
func (e *DebugEncryption) EncryptFile(plaintextAbsPath AbsPath) ([]byte, error) {
ciphertext, err := e.encryption.EncryptFile(plaintextAbsPath)
e.logger.Err(err).
Stringer("plaintextAbsPath", plaintextAbsPath).
Bytes("ciphertext", chezmoilog.Output(ciphertext, err)).
Msg("EncryptFile")
chezmoilog.InfoOrError(e.logger, "EncryptFile", err,
chezmoilog.Stringer("plaintextAbsPath", plaintextAbsPath),
chezmoilog.FirstFewBytes("ciphertext", ciphertext),
)
return ciphertext, err
}

Expand Down
Loading
Loading