Skip to content

Commit 296c77d

Browse files
Move log level setting to Config
1 parent c64afb0 commit 296c77d

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,4 @@ customize its behavior:
6666
| `HTTP_IDLE_TIMEOUT` | The maximum time in seconds that a client can be idle before the connection is closed. | 60 |
6767
| `HTTP_READ_TIMEOUT` | The maximum time in seconds that a client can take to send the request headers. | 30 |
6868
| `HTTP_WRITE_TIMEOUT` | The maximum time in seconds during which the client must read the response. | 30 |
69+
| `DEBUG` | Set to `1` or `true` to enable debug logging. | Disabled |

cmd/thrust/main.go

+3-7
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,19 @@ import (
88
"github.com/basecamp/thruster/internal"
99
)
1010

11-
func setLogger() {
12-
level := slog.LevelInfo
13-
if os.Getenv("DEBUG") != "" {
14-
level = slog.LevelDebug
15-
}
11+
func setLogger(level slog.Level) {
1612
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: level})))
1713
}
1814

1915
func main() {
20-
setLogger()
21-
2216
config, err := internal.NewConfig()
2317
if err != nil {
2418
fmt.Printf("ERROR: %s\n", err)
2519
os.Exit(1)
2620
}
2721

22+
setLogger(config.LogLevel)
23+
2824
service := internal.NewService(config)
2925
os.Exit(service.Run())
3026
}

internal/config.go

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package internal
22

33
import (
44
"errors"
5+
"log/slog"
56
"os"
67
"strconv"
78
"time"
@@ -25,6 +26,8 @@ const (
2526
defaultHttpIdleTimeout = 60 * time.Second
2627
defaultHttpReadTimeout = 30 * time.Second
2728
defaultHttpWriteTimeout = 30 * time.Second
29+
30+
defaultLogLevel = slog.LevelInfo
2831
)
2932

3033
type Config struct {
@@ -46,13 +49,20 @@ type Config struct {
4649
HttpIdleTimeout time.Duration
4750
HttpReadTimeout time.Duration
4851
HttpWriteTimeout time.Duration
52+
53+
LogLevel slog.Level
4954
}
5055

5156
func NewConfig() (*Config, error) {
5257
if len(os.Args) < 2 {
5358
return nil, errors.New("missing upstream command")
5459
}
5560

61+
logLevel := defaultLogLevel
62+
if getEnvBool("DEBUG", false) {
63+
logLevel = slog.LevelDebug
64+
}
65+
5666
return &Config{
5767
TargetPort: getEnvInt("TARGET_PORT", defaultTargetPort),
5868
UpstreamCommand: os.Args[1],
@@ -72,6 +82,8 @@ func NewConfig() (*Config, error) {
7282
HttpIdleTimeout: getEnvDuration("HTTP_IDLE_TIMEOUT", defaultHttpIdleTimeout),
7383
HttpReadTimeout: getEnvDuration("HTTP_READ_TIMEOUT", defaultHttpReadTimeout),
7484
HttpWriteTimeout: getEnvDuration("HTTP_WRITE_TIMEOUT", defaultHttpWriteTimeout),
85+
86+
LogLevel: logLevel,
7587
}, nil
7688
}
7789

internal/config_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package internal
22

33
import (
4+
"log/slog"
45
"testing"
56
"time"
67

@@ -17,6 +18,7 @@ func TestConfig_defaults(t *testing.T) {
1718
assert.Equal(t, 3000, c.TargetPort)
1819
assert.Equal(t, "echo", c.UpstreamCommand)
1920
assert.Equal(t, defaultCacheSize, c.CacheSizeBytes)
21+
assert.Equal(t, slog.LevelInfo, c.LogLevel)
2022
}
2123

2224
func TestConfig_override_defaults_with_env_vars(t *testing.T) {
@@ -25,6 +27,7 @@ func TestConfig_override_defaults_with_env_vars(t *testing.T) {
2527
usingEnvVar(t, "CACHE_SIZE", "256")
2628
usingEnvVar(t, "HTTP_READ_TIMEOUT", "5")
2729
usingEnvVar(t, "X_SENDFILE_ENABLED", "0")
30+
usingEnvVar(t, "DEBUG", "1")
2831

2932
c, err := NewConfig()
3033
require.NoError(t, err)
@@ -33,6 +36,7 @@ func TestConfig_override_defaults_with_env_vars(t *testing.T) {
3336
assert.Equal(t, 256, c.CacheSizeBytes)
3437
assert.Equal(t, 5*time.Second, c.HttpReadTimeout)
3538
assert.Equal(t, false, c.XSendfileEnabled)
39+
assert.Equal(t, slog.LevelDebug, c.LogLevel)
3640
}
3741

3842
func TestConfig_return_error_when_no_upstream_command(t *testing.T) {

0 commit comments

Comments
 (0)