Skip to content

Commit 25c669f

Browse files
committed
fix: replace logrus with slog
Signed-off-by: Bailey Hayes <behayes2@gmail.com>
1 parent cbcf29f commit 25c669f

File tree

5 files changed

+28
-29
lines changed

5 files changed

+28
-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.31.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: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@ import (
1212
"strings"
1313
"syscall"
1414

15+
"log/slog"
16+
1517
"github.com/github/github-mcp-server/pkg/github"
1618
mcplog "github.com/github/github-mcp-server/pkg/log"
1719
"github.com/github/github-mcp-server/pkg/translations"
1820
gogithub "github.com/google/go-github/v72/github"
1921
"github.com/mark3labs/mcp-go/mcp"
2022
"github.com/mark3labs/mcp-go/server"
2123
"github.com/shurcooL/githubv4"
22-
"github.com/sirupsen/logrus"
2324
)
2425

2526
type MCPServerConfig struct {
@@ -190,17 +191,19 @@ func RunStdioServer(cfg StdioServerConfig) error {
190191

191192
stdioServer := server.NewStdioServer(ghServer)
192193

193-
logrusLogger := logrus.New()
194+
var slogHandler slog.Handler
194195
if cfg.LogFilePath != "" {
195196
file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
196197
if err != nil {
197198
return fmt.Errorf("failed to open log file: %w", err)
198199
}
199-
200-
logrusLogger.SetLevel(logrus.DebugLevel)
201-
logrusLogger.SetOutput(file)
200+
slogHandler = slog.NewTextHandler(file, &slog.HandlerOptions{Level: slog.LevelDebug})
201+
} else {
202+
slogHandler = slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelInfo})
202203
}
203-
stdLogger := log.New(logrusLogger.Writer(), "stdioserver", 0)
204+
logger := slog.New(slogHandler)
205+
logger.Info("starting server", "version", cfg.Version, "host", cfg.Host, "dynamicToolsets", cfg.DynamicToolsets, "readOnly", cfg.ReadOnly)
206+
stdLogger := log.New(os.Stderr, "stdioserver", 0)
204207
stdioServer.SetErrorLogger(stdLogger)
205208

206209
if cfg.ExportTranslations {
@@ -214,7 +217,7 @@ func RunStdioServer(cfg StdioServerConfig) error {
214217
in, out := io.Reader(os.Stdin), io.Writer(os.Stdout)
215218

216219
if cfg.EnableCommandLogging {
217-
loggedIO := mcplog.NewIOLogger(in, out, logrusLogger)
220+
loggedIO := mcplog.NewIOLogger(in, out, logger)
218221
in, out = loggedIO, loggedIO
219222
}
220223

@@ -227,9 +230,10 @@ func RunStdioServer(cfg StdioServerConfig) error {
227230
// Wait for shutdown signal
228231
select {
229232
case <-ctx.Done():
230-
logrusLogger.Infof("shutting down server...")
233+
logger.Info("shutting down server", "signal", "context done")
231234
case err := <-errC:
232235
if err != nil {
236+
logger.Error("error running server", "error", err)
233237
return fmt.Errorf("error running server: %w", err)
234238
}
235239
}

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)