From 35c79d98f70f2e1a5b9c71b66050a647305a5b9b Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 10 Mar 2023 11:24:49 -0300 Subject: [PATCH] feat: use charm/logger (#116) * feat: use charm/logger Signed-off-by: Carlos A Becker * fix: stdlog Signed-off-by: Carlos A Becker * wip * fix: improve logger a bit Signed-off-by: Carlos A Becker --------- Signed-off-by: Carlos A Becker --- bubbletea/tea.go | 5 ++--- examples/bubbletea/main.go | 12 ++++++------ examples/bubbleteaprogram/main.go | 12 ++++++------ examples/cobra/main.go | 12 ++++++------ examples/git/main.go | 18 +++++++++--------- examples/go.mod | 2 ++ examples/go.sum | 14 ++++++++++++-- examples/identity/main.go | 12 ++++++------ examples/scp/main.go | 12 ++++++------ examples/simple/main.go | 12 ++++++------ git/git.go | 4 ++-- go.mod | 2 ++ go.sum | 14 ++++++++++++-- logging/logging.go | 23 ++++++++++++++++++----- options.go | 8 ++++---- ratelimiter/ratelimiter.go | 4 ++-- recover/recover.go | 17 +++++++++++++---- 17 files changed, 114 insertions(+), 69 deletions(-) diff --git a/bubbletea/tea.go b/bubbletea/tea.go index 942561d5..ff177374 100644 --- a/bubbletea/tea.go +++ b/bubbletea/tea.go @@ -2,10 +2,9 @@ package bubbletea import ( - "log" - tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" "github.com/muesli/termenv" @@ -86,7 +85,7 @@ func MiddlewareWithProgramHandler(bth ProgramHandler, cp termenv.Profile) wish.M } }() if _, err := p.Run(); err != nil { - log.Print("app exit with error:", err) + log.Error("app exit with error", "error", err) } // p.Kill() will force kill the program if it's still running, // and restore the terminal to its original state in case of a diff --git a/examples/bubbletea/main.go b/examples/bubbletea/main.go index cb862d2c..9569e497 100644 --- a/examples/bubbletea/main.go +++ b/examples/bubbletea/main.go @@ -6,13 +6,13 @@ package main import ( "context" "fmt" - "log" "os" "os/signal" "syscall" "time" tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" bm "github.com/charmbracelet/wish/bubbletea" @@ -34,24 +34,24 @@ func main() { ), ) if err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - log.Printf("Starting SSH server on %s:%d", host, port) + log.Info("Starting SSH server", "host", host, "port", port) go func() { if err = s.ListenAndServe(); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } }() <-done - log.Println("Stopping SSH server") + log.Info("Stopping SSH server") ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer func() { cancel() }() if err := s.Shutdown(ctx); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } } diff --git a/examples/bubbleteaprogram/main.go b/examples/bubbleteaprogram/main.go index 778c2d6f..63af69ee 100644 --- a/examples/bubbleteaprogram/main.go +++ b/examples/bubbleteaprogram/main.go @@ -6,13 +6,13 @@ package main import ( "context" "fmt" - "log" "os" "os/signal" "syscall" "time" tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" bm "github.com/charmbracelet/wish/bubbletea" @@ -35,24 +35,24 @@ func main() { ), ) if err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - log.Printf("Starting SSH server on %s:%d", host, port) + log.Info("Starting SSH server", "host", host, "port", port) go func() { if err = s.ListenAndServe(); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } }() <-done - log.Println("Stopping SSH server") + log.Info("Stopping SSH server") ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer func() { cancel() }() if err := s.Shutdown(ctx); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } } diff --git a/examples/cobra/main.go b/examples/cobra/main.go index ccb42fa2..f3b06e57 100644 --- a/examples/cobra/main.go +++ b/examples/cobra/main.go @@ -3,12 +3,12 @@ package main import ( "context" "fmt" - "log" "os" "os/signal" "syscall" "time" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" "github.com/charmbracelet/wish/logging" @@ -68,23 +68,23 @@ func main() { ), ) if err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - log.Printf("Starting SSH server on %s:%d", host, port) + log.Info("Starting SSH server", "host", host, "port", port) go func() { if err = s.ListenAndServe(); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } }() <-done - log.Println("Stopping SSH server") + log.Info("Stopping SSH server") ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer func() { cancel() }() if err := s.Shutdown(ctx); err != nil { - log.Fatalln(err) + log.Error("could not stop server", "error", err) } } diff --git a/examples/git/main.go b/examples/git/main.go index b2a360b7..9d854f12 100644 --- a/examples/git/main.go +++ b/examples/git/main.go @@ -7,12 +7,12 @@ import ( "context" "fmt" "io/fs" - "log" "os" "os/signal" "syscall" "time" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" gm "github.com/charmbracelet/wish/git" @@ -34,11 +34,11 @@ func (a app) AuthRepo(repo string, pk ssh.PublicKey) gm.AccessLevel { } func (a app) Push(repo string, pk ssh.PublicKey) { - log.Printf("pushed %s", repo) + log.Info("push", "repo", repo) } func (a app) Fetch(repo string, pk ssh.PublicKey) { - log.Printf("fetch %s", repo) + log.Info("fetch", "repo", repo) } func passHandler(ctx ssh.Context, password string) bool { @@ -65,24 +65,24 @@ func main() { ), ) if err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - log.Printf("Starting SSH server on %s:%d", host, port) + log.Info("Starting SSH server", "host", host, "port", port) go func() { if err = s.ListenAndServe(); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } }() <-done - log.Println("Stopping SSH server") + log.Info("Stopping SSH server") ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer func() { cancel() }() if err := s.Shutdown(ctx); err != nil { - log.Fatalln(err) + log.Error("could not stop server", "error", err) } } @@ -96,7 +96,7 @@ func gitListMiddleware(h ssh.Handler) ssh.Handler { if len(s.Command()) == 0 { des, err := os.ReadDir(repoDir) if err != nil && err != fs.ErrNotExist { - log.Println(err) + log.Error("invalid repository", "error", err) } if len(des) > 0 { fmt.Fprintf(s, "\n### Repo Menu ###\n\n") diff --git a/examples/go.mod b/examples/go.mod index f19684ab..3ad4e3a5 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -4,6 +4,7 @@ go 1.18 require ( github.com/charmbracelet/bubbletea v0.23.2 + github.com/charmbracelet/log v0.1.2 github.com/charmbracelet/ssh v0.0.0-20221117183211-483d43d97103 github.com/charmbracelet/wish v0.5.0 github.com/muesli/termenv v0.14.0 @@ -25,6 +26,7 @@ require ( github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.4.0 // indirect github.com/go-git/go-git/v5 v5.5.2 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect diff --git a/examples/go.sum b/examples/go.sum index 375eb09b..3c290667 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -19,6 +19,8 @@ github.com/charmbracelet/keygen v0.3.0 h1:mXpsQcH7DDlST5TddmXNXjS0L7ECk4/kLQYyBc github.com/charmbracelet/keygen v0.3.0/go.mod h1:1ukgO8806O25lUZ5s0IrNur+RlwTBERlezdgW71F5rM= github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= +github.com/charmbracelet/log v0.1.2 h1:xmKMxo0T/lcftgggQOhUkS32exku2/ID55FGYbr4nKQ= +github.com/charmbracelet/log v0.1.2/go.mod h1:86XdIdmrubqtL/6u0z+jGFol1bQejBGG/qPSTwGZuQQ= github.com/charmbracelet/ssh v0.0.0-20221117183211-483d43d97103 h1:wpHMERIN0pQZE635jWwT1dISgfjbpUcEma+fbPKSMCU= github.com/charmbracelet/ssh v0.0.0-20221117183211-483d43d97103/go.mod h1:0Vm2/8yBljiLDnGJHU8ehswfawrEybGk33j5ssqKQVM= github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= @@ -43,6 +45,8 @@ github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlK github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= @@ -108,10 +112,15 @@ github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 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.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= 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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -185,5 +194,6 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= gopkg.in/yaml.v3 v3.0.0/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= diff --git a/examples/identity/main.go b/examples/identity/main.go index 687e8041..9b0b652d 100644 --- a/examples/identity/main.go +++ b/examples/identity/main.go @@ -3,12 +3,12 @@ package main import ( "context" "fmt" - "log" "os" "os/signal" "syscall" "time" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" "github.com/charmbracelet/wish/logging" @@ -45,23 +45,23 @@ func main() { ), ) if err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - log.Printf("Starting SSH server on %s:%d", host, port) + log.Info("Starting SSH server", "host", host, "port", port) go func() { if err = s.ListenAndServe(); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } }() <-done - log.Println("Stopping SSH server") + log.Info("Stopping SSH server") ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer func() { cancel() }() if err := s.Shutdown(ctx); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } } diff --git a/examples/scp/main.go b/examples/scp/main.go index 267353d1..9ff2550e 100644 --- a/examples/scp/main.go +++ b/examples/scp/main.go @@ -5,12 +5,12 @@ package main import ( "context" "fmt" - "log" "os" "os/signal" "syscall" "time" + "github.com/charmbracelet/log" "github.com/charmbracelet/wish" "github.com/charmbracelet/wish/scp" ) @@ -30,23 +30,23 @@ func main() { ), ) if err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - log.Printf("Starting SSH server on %s:%d", host, port) + log.Info("Starting SSH server", "host", host, "port", port) go func() { if err = s.ListenAndServe(); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } }() <-done - log.Println("Stopping SSH server") + log.Info("Stopping SSH server") ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer func() { cancel() }() if err := s.Shutdown(ctx); err != nil { - log.Fatalln(err) + log.Error("could not stop server", "error", err) } } diff --git a/examples/simple/main.go b/examples/simple/main.go index 9d02fae5..27e52133 100644 --- a/examples/simple/main.go +++ b/examples/simple/main.go @@ -3,12 +3,12 @@ package main import ( "context" "fmt" - "log" "os" "os/signal" "syscall" "time" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" "github.com/charmbracelet/wish/logging" @@ -34,23 +34,23 @@ func main() { ), ) if err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - log.Printf("Starting SSH server on %s:%d", host, port) + log.Info("Starting SSH server", "host", host, "port", port) go func() { if err = s.ListenAndServe(); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } }() <-done - log.Println("Stopping SSH server") + log.Info("Stopping SSH server") ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer func() { cancel() }() if err := s.Shutdown(ctx); err != nil { - log.Fatalln(err) + log.Error("could not start server", "error", err) } } diff --git a/git/git.go b/git/git.go index b26a26e4..dc5c0121 100644 --- a/git/git.go +++ b/git/git.go @@ -3,12 +3,12 @@ package git import ( "errors" "fmt" - "log" "os" "os/exec" "path/filepath" "strings" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" "github.com/go-git/go-git/v5" @@ -103,7 +103,7 @@ func Middleware(repoDir string, gh Hooks) wish.Middleware { case nil: gh.Fetch(repo, pk) default: - log.Printf("unknown git error: %s", err) + log.Error("unknown git error", "error", err) Fatal(s, ErrSystemMalfunction) } default: diff --git a/go.mod b/go.mod index 417a2054..0fcc5e97 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/charmbracelet/bubbletea v0.23.2 github.com/charmbracelet/keygen v0.3.0 github.com/charmbracelet/lipgloss v0.6.0 + github.com/charmbracelet/log v0.1.2 github.com/charmbracelet/ssh v0.0.0-20221117183211-483d43d97103 github.com/go-git/go-git/v5 v5.5.2 github.com/google/go-cmp v0.5.9 @@ -29,6 +30,7 @@ require ( github.com/emirpasic/gods v1.18.1 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.4.0 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect diff --git a/go.sum b/go.sum index e37b0fe9..d039ed10 100644 --- a/go.sum +++ b/go.sum @@ -19,6 +19,8 @@ github.com/charmbracelet/keygen v0.3.0 h1:mXpsQcH7DDlST5TddmXNXjS0L7ECk4/kLQYyBc github.com/charmbracelet/keygen v0.3.0/go.mod h1:1ukgO8806O25lUZ5s0IrNur+RlwTBERlezdgW71F5rM= github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= +github.com/charmbracelet/log v0.1.2 h1:xmKMxo0T/lcftgggQOhUkS32exku2/ID55FGYbr4nKQ= +github.com/charmbracelet/log v0.1.2/go.mod h1:86XdIdmrubqtL/6u0z+jGFol1bQejBGG/qPSTwGZuQQ= github.com/charmbracelet/ssh v0.0.0-20221117183211-483d43d97103 h1:wpHMERIN0pQZE635jWwT1dISgfjbpUcEma+fbPKSMCU= github.com/charmbracelet/ssh v0.0.0-20221117183211-483d43d97103/go.mod h1:0Vm2/8yBljiLDnGJHU8ehswfawrEybGk33j5ssqKQVM= github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= @@ -42,6 +44,8 @@ github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlK github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/hashicorp/golang-lru/v2 v2.0.1 h1:5pv5N1lT1fjLg2VQ5KWc7kmucp2x/kvFOnxuVTqZ6x4= @@ -103,10 +107,15 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= 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.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= 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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -181,5 +190,6 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= gopkg.in/yaml.v3 v3.0.0/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= diff --git a/logging/logging.go b/logging/logging.go index 3c51709c..8bd69b81 100644 --- a/logging/logging.go +++ b/logging/logging.go @@ -1,9 +1,9 @@ package logging import ( - "log" "time" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" ) @@ -15,7 +15,7 @@ import ( // // The logger is set to the std default logger. func Middleware() wish.Middleware { - return MiddlewareWithLogger(log.Default()) + return MiddlewareWithLogger(log.StandardLog()) } // Logger is the interface that wraps the basic Log method. @@ -27,15 +27,28 @@ type Logger interface { // remote address, invoked command, TERM setting, window dimensions and if the // auth was public key based. Disconnect will log the remote address and // connection duration. -func MiddlewareWithLogger(l Logger) wish.Middleware { +func MiddlewareWithLogger(logger Logger) wish.Middleware { return func(sh ssh.Handler) ssh.Handler { return func(s ssh.Session) { ct := time.Now() hpk := s.PublicKey() != nil pty, _, _ := s.Pty() - l.Printf("%s connect %s %v %v %s %v %v\n", s.User(), s.RemoteAddr().String(), hpk, s.Command(), pty.Term, pty.Window.Width, pty.Window.Height) + logger.Printf( + "%s connect %s %v %v %s %v %v", + s.User(), + s.RemoteAddr().String(), + hpk, + s.Command(), + pty.Term, + pty.Window.Width, + pty.Window.Height, + ) sh(s) - l.Printf("%s disconnect %s\n", s.RemoteAddr().String(), time.Since(ct)) + logger.Printf( + "%s disconnect %s\n", + s.RemoteAddr().String(), + time.Since(ct), + ) } } } diff --git a/options.go b/options.go index da59a7e6..10239dcb 100644 --- a/options.go +++ b/options.go @@ -5,13 +5,13 @@ import ( "bytes" "errors" "io" - "log" "os" "path/filepath" "strings" "time" "github.com/charmbracelet/keygen" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" gossh "golang.org/x/crypto/ssh" ) @@ -123,7 +123,7 @@ func WithTrustedUserCAKeys(path string) ssh.Option { func isAuthorized(path string, checker func(k ssh.PublicKey) bool) bool { f, err := os.Open(path) if err != nil { - log.Printf("failed to parse %q: %s", path, err) + log.Warn("failed to parse", "path", path, "error", err) return false } defer f.Close() // nolint: errcheck @@ -135,7 +135,7 @@ func isAuthorized(path string, checker func(k ssh.PublicKey) bool) bool { if errors.Is(err, io.EOF) { break } - log.Printf("failed to parse %q: %s", path, err) + log.Warn("failed to parse", "path", path, "error", err) return false } if strings.TrimSpace(string(line)) == "" { @@ -146,7 +146,7 @@ func isAuthorized(path string, checker func(k ssh.PublicKey) bool) bool { } upk, _, _, _, err := ssh.ParseAuthorizedKey(line) if err != nil { - log.Printf("failed to parse %q: %s", path, err) + log.Warn("failed to parse", "path", path, "error", err) return false } if checker(upk) { diff --git a/ratelimiter/ratelimiter.go b/ratelimiter/ratelimiter.go index d7b0a203..7b9d2b7d 100644 --- a/ratelimiter/ratelimiter.go +++ b/ratelimiter/ratelimiter.go @@ -3,9 +3,9 @@ package ratelimiter import ( "errors" - "log" "net" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" lru "github.com/hashicorp/golang-lru/v2" @@ -81,7 +81,7 @@ func (r *limiters) Allow(s ssh.Session) error { r.cache.Add(key, limiter) } - log.Printf("rate limiter key: %q, allowed? %v", key, allowed) + log.Debug("rate limiter key", "key", key, "allowed", allowed) if allowed { return nil } diff --git a/recover/recover.go b/recover/recover.go index 8ef8a80a..769309c0 100644 --- a/recover/recover.go +++ b/recover/recover.go @@ -1,9 +1,9 @@ package recover import ( - "log" "runtime/debug" + "github.com/charmbracelet/log" "github.com/charmbracelet/ssh" "github.com/charmbracelet/wish" ) @@ -13,11 +13,16 @@ func Middleware(mw ...wish.Middleware) wish.Middleware { return MiddlewareWithLogger(nil, mw...) } +// Logger is the interface that wraps the basic Log method. +type Logger interface { + Printf(format string, v ...interface{}) +} + // MiddlewareWithLogger is a wish middleware that recovers from panics and log to // the provided logger. -func MiddlewareWithLogger(logger *log.Logger, mw ...wish.Middleware) wish.Middleware { +func MiddlewareWithLogger(logger Logger, mw ...wish.Middleware) wish.Middleware { if logger == nil { - logger = log.Default() + logger = log.StandardLog() } h := func(ssh.Session) {} for _, m := range mw { @@ -28,7 +33,11 @@ func MiddlewareWithLogger(logger *log.Logger, mw ...wish.Middleware) wish.Middle func() { defer func() { if r := recover(); r != nil { - logger.Printf("panic: %v\n%s", r, string(debug.Stack())) + logger.Printf( + "panic: %v\n%s", + r, + string(debug.Stack()), + ) } }() h(s)