Skip to content

Commit b01629a

Browse files
committed
fix: replace logrus with slog
Signed-off-by: Bailey Hayes <[email protected]>
1 parent efef8ae commit b01629a

File tree

5 files changed

+27
-29
lines changed

5 files changed

+27
-29
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ require (
77
github.com/josephburnett/jd v1.9.2
88
github.com/mark3labs/mcp-go v0.32.0
99
github.com/migueleliasweb/go-github-mock v1.3.0
10-
github.com/sirupsen/logrus v1.9.3
1110
github.com/spf13/cobra v1.9.1
1211
github.com/spf13/viper v1.20.1
1312
github.com/stretchr/testify v1.10.0

go.sum

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ github.com/shurcooL/githubv4 v0.0.0-20240727222349-48295856cce7 h1:cYCy18SHPKRkv
6666
github.com/shurcooL/githubv4 v0.0.0-20240727222349-48295856cce7/go.mod h1:zqMwyHmnN/eDOZOdiTohqIUKUrTFX62PNlu7IJdu0q8=
6767
github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 h1:17JxqqJY66GmZVHkmAsGEkcIu0oCe3AM420QDgGwZx0=
6868
github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466/go.mod h1:9dIRpgIY7hVhoqfe0/FcYp0bpInZaT7dc3BYOprrIUE=
69-
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
70-
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
7169
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
7270
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
7371
github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
@@ -83,7 +81,6 @@ github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqj
8381
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
8482
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
8583
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
86-
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
8784
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
8885
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
8986
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
@@ -98,7 +95,6 @@ golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0
9895
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
9996
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
10097
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
101-
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
10298
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
10399
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
104100
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=

internal/ghmcp/server.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"io"
77
"log"
8+
"log/slog"
89
"net/http"
910
"net/url"
1011
"os"
@@ -21,7 +22,6 @@ import (
2122
"github.com/mark3labs/mcp-go/mcp"
2223
"github.com/mark3labs/mcp-go/server"
2324
"github.com/shurcooL/githubv4"
24-
"github.com/sirupsen/logrus"
2525
)
2626

2727
type MCPServerConfig struct {
@@ -203,17 +203,19 @@ func RunStdioServer(cfg StdioServerConfig) error {
203203

204204
stdioServer := server.NewStdioServer(ghServer)
205205

206-
logrusLogger := logrus.New()
206+
var slogHandler slog.Handler
207207
if cfg.LogFilePath != "" {
208208
file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
209209
if err != nil {
210210
return fmt.Errorf("failed to open log file: %w", err)
211211
}
212-
213-
logrusLogger.SetLevel(logrus.DebugLevel)
214-
logrusLogger.SetOutput(file)
212+
slogHandler = slog.NewTextHandler(file, &slog.HandlerOptions{Level: slog.LevelDebug})
213+
} else {
214+
slogHandler = slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelInfo})
215215
}
216-
stdLogger := log.New(logrusLogger.Writer(), "stdioserver", 0)
216+
logger := slog.New(slogHandler)
217+
logger.Info("starting server", "version", cfg.Version, "host", cfg.Host, "dynamicToolsets", cfg.DynamicToolsets, "readOnly", cfg.ReadOnly)
218+
stdLogger := log.New(os.Stderr, "stdioserver", 0)
217219
stdioServer.SetErrorLogger(stdLogger)
218220

219221
if cfg.ExportTranslations {
@@ -227,7 +229,7 @@ func RunStdioServer(cfg StdioServerConfig) error {
227229
in, out := io.Reader(os.Stdin), io.Writer(os.Stdout)
228230

229231
if cfg.EnableCommandLogging {
230-
loggedIO := mcplog.NewIOLogger(in, out, logrusLogger)
232+
loggedIO := mcplog.NewIOLogger(in, out, logger)
231233
in, out = loggedIO, loggedIO
232234
}
233235
// enable GitHub errors in the context
@@ -241,9 +243,10 @@ func RunStdioServer(cfg StdioServerConfig) error {
241243
// Wait for shutdown signal
242244
select {
243245
case <-ctx.Done():
244-
logrusLogger.Infof("shutting down server...")
246+
logger.Info("shutting down server", "signal", "context done")
245247
case err := <-errC:
246248
if err != nil {
249+
logger.Error("error running server", "error", err)
247250
return fmt.Errorf("error running server: %w", err)
248251
}
249252
}

pkg/log/io.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@ package log
33
import (
44
"io"
55

6-
log "github.com/sirupsen/logrus"
6+
"log/slog"
77
)
88

99
// IOLogger is a wrapper around io.Reader and io.Writer that can be used
1010
// to log the data being read and written from the underlying streams
1111
type IOLogger struct {
1212
reader io.Reader
1313
writer io.Writer
14-
logger *log.Logger
14+
logger *slog.Logger
1515
}
1616

1717
// NewIOLogger creates a new IOLogger instance
18-
func NewIOLogger(r io.Reader, w io.Writer, logger *log.Logger) *IOLogger {
18+
func NewIOLogger(r io.Reader, w io.Writer, logger *slog.Logger) *IOLogger {
1919
return &IOLogger{
2020
reader: r,
2121
writer: w,
@@ -30,7 +30,7 @@ func (l *IOLogger) Read(p []byte) (n int, err error) {
3030
}
3131
n, err = l.reader.Read(p)
3232
if n > 0 {
33-
l.logger.Infof("[stdin]: received %d bytes: %s", n, string(p[:n]))
33+
l.logger.Info("[stdin]: received bytes", "count", n, "data", string(p[:n]))
3434
}
3535
return n, err
3636
}
@@ -40,6 +40,6 @@ func (l *IOLogger) Write(p []byte) (n int, err error) {
4040
if l.writer == nil {
4141
return 0, io.ErrClosedPipe
4242
}
43-
l.logger.Infof("[stdout]: sending %d bytes: %s", len(p), string(p))
43+
l.logger.Info("[stdout]: sending bytes", "count", len(p), "data", string(p))
4444
return l.writer.Write(p)
4545
}

pkg/log/io_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import (
55
"strings"
66
"testing"
77

8-
log "github.com/sirupsen/logrus"
8+
"log/slog"
9+
910
"github.com/stretchr/testify/assert"
1011
)
1112

@@ -17,11 +18,7 @@ func TestLoggedReadWriter(t *testing.T) {
1718

1819
// Create logger with buffer to capture output
1920
var logBuffer bytes.Buffer
20-
logger := log.New()
21-
logger.SetOutput(&logBuffer)
22-
logger.SetFormatter(&log.TextFormatter{
23-
DisableTimestamp: true,
24-
})
21+
logger := slog.New(slog.NewTextHandler(&logBuffer, &slog.HandlerOptions{ReplaceAttr: RemoveTimeAttr}))
2522

2623
lrw := NewIOLogger(reader, nil, logger)
2724

@@ -44,11 +41,7 @@ func TestLoggedReadWriter(t *testing.T) {
4441

4542
// Create logger with buffer to capture output
4643
var logBuffer bytes.Buffer
47-
logger := log.New()
48-
logger.SetOutput(&logBuffer)
49-
logger.SetFormatter(&log.TextFormatter{
50-
DisableTimestamp: true,
51-
})
44+
logger := slog.New(slog.NewTextHandler(&logBuffer, &slog.HandlerOptions{ReplaceAttr: RemoveTimeAttr}))
5245

5346
lrw := NewIOLogger(nil, &writeBuffer, logger)
5447

@@ -63,3 +56,10 @@ func TestLoggedReadWriter(t *testing.T) {
6356
assert.Contains(t, logBuffer.String(), outputData)
6457
})
6558
}
59+
60+
func RemoveTimeAttr(groups []string, a slog.Attr) slog.Attr {
61+
if a.Key == slog.TimeKey && len(groups) == 0 {
62+
return slog.Attr{}
63+
}
64+
return a
65+
}

0 commit comments

Comments
 (0)