Skip to content

Commit 3c8d679

Browse files
committed
add opinionated logging with zap
1 parent f25471a commit 3c8d679

File tree

5 files changed

+74
-15
lines changed

5 files changed

+74
-15
lines changed

.golangci.yml

+2
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ linters:
1616
- gosimple
1717
- govet
1818
- ineffassign
19+
- loggercheck
1920
- misspell
2021
- nilerr
2122
- nilnil
2223
- prealloc
24+
- predeclared
2325
- reassign
2426
- revive
2527
- unconvert

Dockerfile

+1
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ COPY --from=builder /build/go-project-template /go-project-template
1616
USER 1000:1000
1717

1818
ENTRYPOINT [ "/go-project-template" ]
19+
CMD [ "-version" ]

go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ module github.com/capnspacehook/go-project-template
22

33
go 1.19
44

5-
require rsc.io/quote v1.5.2
5+
require go.uber.org/zap v1.23.0
66

77
require (
8-
golang.org/x/text v0.4.0 // indirect
9-
rsc.io/sampler v1.3.0 // indirect
8+
go.uber.org/atomic v1.7.0 // indirect
9+
go.uber.org/multierr v1.6.0 // indirect
1010
)

go.sum

+18-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
1-
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
2-
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
3-
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
4-
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
5-
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
6-
rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=
7-
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
1+
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
2+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
4+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5+
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
6+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
7+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
8+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
9+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
10+
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
11+
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
12+
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
13+
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
14+
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
15+
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
16+
go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY=
17+
go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY=
18+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

main.go

+50-5
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
package main
22

33
import (
4+
"context"
45
"flag"
56
"fmt"
67
"log"
78
"os"
9+
"os/signal"
810
"runtime/debug"
911

10-
"rsc.io/quote"
12+
"go.uber.org/zap"
13+
"go.uber.org/zap/zapcore"
1114
)
1215

1316
const projectName = "Go Project Template" // REPLACE WITH YOUR PROJECT NAME HERE
1417

15-
var printVersion bool
18+
var (
19+
debugLogs bool
20+
logPath string
21+
printVersion bool
22+
)
1623

1724
func usage() {
1825
fmt.Fprintf(os.Stderr, `
1926
<Project description>
2027
2128
<binary name> [flags]
22-
29+
2330
<Project details/usage>
2431
2532
%s accepts the following flags:
@@ -34,6 +41,8 @@ For more information, see https://github.com/<user>/<repo>.
3441

3542
func init() {
3643
flag.Usage = usage
44+
flag.BoolVar(&debugLogs, "debug", false, "enable debug logging")
45+
flag.StringVar(&logPath, "l", "stdout", "path to log to")
3746
flag.BoolVar(&printVersion, "version", false, "print version and build information and exit")
3847
}
3948

@@ -55,8 +64,44 @@ func mainRetCode() int {
5564
return 0
5665
}
5766

58-
// REPLACE WITH YOUR CODE HERE
59-
fmt.Println(quote.Glass())
67+
// build logger
68+
logCfg := zap.NewProductionConfig()
69+
logCfg.OutputPaths = []string{logPath}
70+
if debugLogs {
71+
logCfg.Level.SetLevel(zap.DebugLevel)
72+
}
73+
logCfg.EncoderConfig.TimeKey = "time"
74+
logCfg.EncoderConfig.EncodeTime = zapcore.RFC3339NanoTimeEncoder
75+
logCfg.DisableCaller = true
76+
77+
logger, err := logCfg.Build()
78+
if err != nil {
79+
log.Printf("error creating logger: %v", err)
80+
return 1
81+
}
82+
83+
// may also want to add syscall.SIGTERM on unix based OSes
84+
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
85+
defer cancel()
86+
87+
// log current version/commit
88+
versionFields := []zap.Field{
89+
zap.String("version", version),
90+
}
91+
for _, buildSetting := range info.Settings {
92+
if buildSetting.Key == "vcs.revision" {
93+
versionFields = append(versionFields, zap.String("commit", buildSetting.Value))
94+
break
95+
}
96+
}
97+
logger.Info("starting "+projectName, versionFields...)
98+
99+
// START MAIN LOGIC HERE
100+
101+
<-ctx.Done()
102+
logger.Info("shutting down")
103+
104+
// STOP MAIN LOGIC HERE
60105

61106
return 0
62107
}

0 commit comments

Comments
 (0)