Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.

Commit 1138dac

Browse files
authored
Merge pull request #73 from tylerslaton/json-structured-logging
Use JSON Formatter for logrus and add dev mode
2 parents e8a5342 + 5135650 commit 1138dac

File tree

8 files changed

+85
-37
lines changed

8 files changed

+85
-37
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
acorn-dns
22
acorn.sqlite
3+
.env

Acornfile

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,24 @@ args: {
1818
containers: {
1919
"acorn-dns": {
2020
if args.dbHost == "db" {
21-
dependsOn: "db"
21+
dependsOn: "db"
2222
}
23+
2324
build: {
2425
buildArgs: {
2526
TAG: args.tag
2627
}
2728
context: "."
2829
}
30+
31+
// Setup hot-reloading for api-server
32+
if args.dev {
33+
workdir: "/app"
34+
image: "docker.io/cosmtrek/air" // https://github.com/cosmtrek/air
35+
dirs: "/app": "./"
36+
cmd: "api-server"
37+
}
38+
2939
scale: args.scale
3040
ports: "4315/http"
3141
env: {
@@ -38,42 +48,45 @@ containers: {
3848
ACORN_ROUTE53_ZONE_ID: args.route53ZoneId
3949
AWS_ACCESS_KEY_ID: "secret://aws-creds/access-key?onchange=no-action"
4050
AWS_SECRET_ACCESS_KEY: "secret://aws-creds/secret-key?onchange=no-action"
51+
AWS_SESSION_TOKEN: "secret://aws-creds/session-token?onchange=no-action"
4152
}
4253
},
4354
if args.dbHost == "db" {
44-
db: {
45-
image: "mariadb:10.7.4"
46-
env: {
47-
MARIADB_ROOT_PASSWORD: "secret://root-credentials/password?onchange=no-action"
48-
MARIADB_USER: "secret://db-user-credentials/username?onchange=no-action"
49-
MARIADB_PASSWORD: "secret://db-user-credentials/password?onchange=no-action"
50-
MARIADB_DATABASE: args.dbName
55+
db: {
56+
image: "mariadb:10.7.4"
57+
env: {
58+
MARIADB_ROOT_PASSWORD: "secret://root-credentials/password?onchange=no-action"
59+
MARIADB_USER: "secret://db-user-credentials/username?onchange=no-action"
60+
MARIADB_PASSWORD: "secret://db-user-credentials/password?onchange=no-action"
61+
MARIADB_DATABASE: args.dbName
62+
}
63+
ports: "3306/tcp"
5164
}
52-
ports: "3306/tcp"
53-
}
5465
}
5566
}
5667

5768
secrets: {
5869
if args.dbHost == "db" {
59-
"root-credentials": {
60-
type: "basic"
61-
data: {
62-
username: "root"
70+
"root-credentials": {
71+
type: "basic"
72+
data: {
73+
username: "root"
74+
}
6375
}
64-
}
65-
"db-user-credentials": {
66-
type: "basic"
67-
data: {
68-
username: "acorn"
76+
"db-user-credentials": {
77+
type: "basic"
78+
data: {
79+
username: "acorn"
80+
}
6981
}
7082
}
71-
}
83+
7284
"aws-creds": {
7385
type: "opaque"
7486
data: {
7587
"access-key": ""
7688
"secret-key": ""
89+
"session-token": ""
7790
}
7891
}
7992
}

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ validate:
2121

2222
test:
2323
go test ./...
24+
25+
dev:
26+
./scripts/dev.sh

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,5 @@ OPTIONS:
3333
--db-port value Database port [$ACORN_DB_PORT]
3434
--log-level value, -l value Log Level (default: "info") [$LOGLEVEL]
3535
--log-caller log the caller (aka line number and file) (default: false)
36-
--log-disable-color disable log coloring (default: false)
37-
--log-full-timestamp force log output to always show full timestamp (default: false)
3836
--help, -h show help (default: false)
3937
```

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import (
55
"path"
66

77
"github.com/acorn-io/acorn-dns/pkg/commands"
8-
_ "github.com/acorn-io/acorn-dns/pkg/commands"
98
"github.com/acorn-io/acorn-dns/pkg/version"
109
"github.com/sirupsen/logrus"
1110
"github.com/urfave/cli/v2"
1211
)
1312

1413
func main() {
14+
logrus.SetFormatter(&logrus.JSONFormatter{})
1515
defer func() {
1616
if r := recover(); r != nil {
1717
// log panics forces exit

pkg/apiserver/logging_middleware.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package apiserver
22

33
import (
4+
"fmt"
45
"net"
56
"net/http"
67
"runtime/debug"
@@ -70,12 +71,19 @@ func loggingMiddleware(logger *logrus.Entry) func(http.Handler) http.Handler {
7071
next.ServeHTTP(wrapped, r)
7172

7273
if !strings.Contains(r.URL.EscapedPath(), "healthz") {
73-
logger.WithFields(logrus.Fields{
74+
requestLogger := logger.WithFields(logrus.Fields{
7475
"status": wrapped.status,
7576
"method": r.Method,
7677
"path": r.URL.EscapedPath(),
7778
"duration": time.Since(start),
78-
}).Infof("handled: %d", wrapped.status)
79+
})
80+
81+
msg := fmt.Sprintf("handled: %d", wrapped.status)
82+
if wrapped.status >= 400 {
83+
requestLogger.Error(msg)
84+
} else {
85+
requestLogger.Debug(msg)
86+
}
7987
}
8088
}
8189

pkg/commands/global.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,14 @@ func GlobalFlags() []cli.Flag {
2222
Name: "log-caller",
2323
Usage: "log the caller (aka line number and file)",
2424
},
25-
&cli.BoolFlag{
26-
Name: "log-disable-color",
27-
Usage: "disable log coloring",
28-
},
29-
&cli.BoolFlag{
30-
Name: "log-full-timestamp",
31-
Usage: "force log output to always show full timestamp",
32-
},
3325
}
3426

3527
return globalFlags
3628
}
3729

3830
func Before(c *cli.Context) error {
39-
formatter := &logrus.TextFormatter{
40-
DisableColors: c.Bool("log-disable-color"),
41-
FullTimestamp: c.Bool("log-full-timestamp"),
42-
}
31+
formatter := &logrus.JSONFormatter{}
32+
4333
if c.Bool("log-caller") {
4434
logrus.SetReportCaller(true)
4535

scripts/dev.sh

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Ensure that the AWS credentials are set before proceeding
2+
if [ -z "$AWS_ACCESS_KEY_ID" ]; then
3+
echo "AWS_ACCESS_KEY_ID is not set, please set it and try again"
4+
exit 1
5+
fi
6+
if [ -z "$AWS_SECRET_ACCESS_KEY" ]; then
7+
echo "AWS_SECRET_ACCESS_KEY is not set, please set it and try again"
8+
exit 1
9+
fi
10+
if [ -z "$AWS_SESSION_TOKEN" ]; then
11+
echo "AWS_SESSION_TOKEN is not set, please set it and try again"
12+
exit 1
13+
fi
14+
15+
# Replace the current aws-creds secret if it exists
16+
acorn secrets aws-creds > /dev/null 2>&1
17+
if [ $? -eq 0 ]; then
18+
echo "aws-creds secret already exists, deleting it..."
19+
acorn secret rm aws-creds > /dev/null 2>&1
20+
fi
21+
22+
acorn secret create aws-creds \
23+
--data access-key=$AWS_ACCESS_KEY_ID \
24+
--data secret-key=$AWS_SECRET_ACCESS_KEY \
25+
--data session-token=$AWS_SESSION_TOKEN \
26+
> /dev/null
27+
28+
# Ensure that the ROUTE53_ZONE_ID is set before proceeding
29+
if [ -z "$ROUTE53_ZONE_ID" ]; then
30+
echo "ROUTE53_ZONE_ID is not set, please set it and try again"
31+
exit 1
32+
fi
33+
34+
# Hand-off start to acorn and link the aws-creds secret
35+
acorn dev -p 4315:4315 -s aws-creds:aws-creds . --route53-zone-id $ROUTE53_ZONE_ID

0 commit comments

Comments
 (0)