Skip to content

Commit 8a22d6e

Browse files
committed
log: capture exit conditions
Replace executions of 'os.Exit()', 'log.Fatal()', and 'log.Fatalf()' with 'TraceLogger.Exit()', 'TraceLogger.Fatal()', and 'TraceLogger.Fatalf()', respectively. When these are called, log the appropriate 'exit'/'atexit' events. Note that 'TraceLogger.Fatal()' and 'TraceLogger.Fatalf()' currently do not log the error (or error format + args) they receive. This will be updated in a later patch, but the unused arguments are added now to avoid needing to remove then later add back the arguments passed to 'log.Fatal()' and 'log.Fatalf()' by their callers. Signed-off-by: Victoria Dye <[email protected]>
1 parent 1120993 commit 8a22d6e

File tree

5 files changed

+28
-14
lines changed

5 files changed

+28
-14
lines changed

cmd/git-bundle-server/main.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ package main
22

33
import (
44
"context"
5-
"log"
65
"os"
76

87
"github.com/github/git-bundle-server/internal/argparse"
9-
tracelog "github.com/github/git-bundle-server/internal/log"
8+
"github.com/github/git-bundle-server/internal/log"
109
)
1110

12-
func all(logger tracelog.TraceLogger) []argparse.Subcommand {
11+
func all(logger log.TraceLogger) []argparse.Subcommand {
1312
return []argparse.Subcommand{
1413
NewDeleteCommand(logger),
1514
NewInitCommand(logger),
@@ -22,7 +21,7 @@ func all(logger tracelog.TraceLogger) []argparse.Subcommand {
2221
}
2322

2423
func main() {
25-
tracelog.WithTraceLogger(context.Background(), func(ctx context.Context, logger tracelog.TraceLogger) {
24+
log.WithTraceLogger(context.Background(), func(ctx context.Context, logger log.TraceLogger) {
2625
cmds := all(logger)
2726

2827
parser := argparse.NewArgParser(logger, "git-bundle-server <command> [<options>]")
@@ -34,7 +33,7 @@ func main() {
3433

3534
err := parser.InvokeSubcommand(ctx)
3635
if err != nil {
37-
log.Fatalf("Failed with error: %s", err)
36+
logger.Fatalf(ctx, "Failed with error: %s", err)
3837
}
3938
})
4039
}

cmd/git-bundle-web-server/bundle-server.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package main
33
import (
44
"context"
55
"fmt"
6-
"log"
76
"net/http"
87
"os"
98
"os/signal"
@@ -13,17 +12,17 @@ import (
1312

1413
"github.com/github/git-bundle-server/internal/common"
1514
"github.com/github/git-bundle-server/internal/core"
16-
tracelog "github.com/github/git-bundle-server/internal/log"
15+
"github.com/github/git-bundle-server/internal/log"
1716
)
1817

1918
type bundleWebServer struct {
20-
logger tracelog.TraceLogger
19+
logger log.TraceLogger
2120
server *http.Server
2221
serverWaitGroup *sync.WaitGroup
2322
listenAndServeFunc func() error
2423
}
2524

26-
func NewBundleWebServer(logger tracelog.TraceLogger,
25+
func NewBundleWebServer(logger log.TraceLogger,
2726
port string, certFile string, keyFile string,
2827
) *bundleWebServer {
2928
bundleServer := &bundleWebServer{
@@ -123,7 +122,7 @@ func (b *bundleWebServer) StartServerAsync(ctx context.Context) {
123122
// Return error unless it indicates graceful shutdown
124123
err := b.listenAndServeFunc()
125124
if err != nil && err != http.ErrServerClosed {
126-
log.Fatal(err)
125+
b.logger.Fatal(ctx, err)
127126
}
128127
}(ctx)
129128

internal/argparse/argparse.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"flag"
66
"fmt"
7-
"os"
87
"strings"
98

109
"github.com/github/git-bundle-server/internal/log"
@@ -146,7 +145,7 @@ func (a *argParser) Parse(ctx context.Context, args []string) {
146145
if err != nil {
147146
// The error was already printed (via a.FlagSet.Usage()), so we
148147
// just need to exit
149-
os.Exit(usageExitCode)
148+
a.logger.Exit(ctx, usageExitCode)
150149
}
151150

152151
if len(a.subcommands) > 0 {
@@ -222,5 +221,5 @@ func (a *argParser) Usage(ctx context.Context, errFmt string, args ...any) {
222221
fmt.Fprintf(a.FlagSet.Output(), errFmt+"\n", args...)
223222
a.FlagSet.Usage()
224223

225-
os.Exit(usageExitCode)
224+
a.logger.Exit(ctx, usageExitCode)
226225
}

internal/log/logger.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import (
77
"runtime/debug"
88
)
99

10-
type TraceLogger interface{}
10+
type TraceLogger interface {
11+
Exit(ctx context.Context, exitCode int)
12+
Fatal(ctx context.Context, err error)
13+
Fatalf(ctx context.Context, format string, a ...any)
14+
}
1115

1216
type traceLoggerInternal interface {
1317
// Internal setup/teardown functions

internal/log/trace2.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,16 @@ func (t *Trace2) logExit(ctx context.Context, exitCode int) {
165165

166166
t.logger.Sync()
167167
}
168+
169+
func (t *Trace2) Exit(ctx context.Context, exitCode int) {
170+
t.logExit(ctx, exitCode)
171+
os.Exit(exitCode)
172+
}
173+
174+
func (t *Trace2) Fatal(ctx context.Context, err error) {
175+
t.Exit(ctx, 1)
176+
}
177+
178+
func (t *Trace2) Fatalf(ctx context.Context, format string, a ...any) {
179+
t.Exit(ctx, 1)
180+
}

0 commit comments

Comments
 (0)