Skip to content

Commit e719a5f

Browse files
committed
feat: support zap logger's development mode
This PR adds a new flag `--enable-development-mode` to enable development mode for the logger. If it is true, the logger panics at the DPanic level.
1 parent 06ca186 commit e719a5f

File tree

8 files changed

+55
-4
lines changed

8 files changed

+55
-4
lines changed

cmd/varlogadm/cli.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ func newStartCommand() *cli.Command {
7979
flags.LogFileCompression,
8080
flags.LogHumanReadable,
8181
flags.LogLevel,
82+
flags.EnableDevelopmentMode,
8283

8384
// telemetry
8485
flags.TelemetryExporter,
@@ -101,7 +102,6 @@ func start(c *cli.Context) error {
101102
if err != nil {
102103
return err
103104
}
104-
logOpts = append(logOpts, log.WithZapLoggerOptions(zap.AddStacktrace(zap.DPanicLevel)))
105105
logger, err := log.New(logOpts...)
106106
if err != nil {
107107
return err

cmd/varlogadm/testdata/varlogadm.ct

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ OPTIONS:
4444

4545
Logger:
4646

47+
--enable-development-mode Enable development mode for the logger. Panics on DPanic-level logs if true. (default: false) [$ENABLE_DEVELOPMENT_MODE]
4748
--log-human-readable Human-readable output. (default: false) [$LOG_HUMAN_READABLE]
4849
--logdir value, --log-dir value Directory for the log files. [$LOGDIR, $LOG_DIR]
4950
--logfile-compression Compress backup log files. (default: false) [$LOGFILE_COMPRESSION]

cmd/varlogmr/metadata_repository.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99

1010
"github.com/urfave/cli/v2"
1111
_ "go.uber.org/automaxprocs"
12-
"go.uber.org/zap"
1312

1413
"github.com/kakao/varlog/internal/buildinfo"
1514
"github.com/kakao/varlog/internal/flags"
@@ -31,7 +30,6 @@ func start(c *cli.Context) error {
3130
if err != nil {
3231
return err
3332
}
34-
logOpts = append(logOpts, log.WithZapLoggerOptions(zap.AddStacktrace(zap.DPanicLevel)))
3533
logger, err := log.New(logOpts...)
3634
if err != nil {
3735
return err
@@ -168,6 +166,7 @@ func initCLI() *cli.App {
168166
flags.LogFileCompression,
169167
flags.LogHumanReadable,
170168
flags.LogLevel,
169+
flags.EnableDevelopmentMode,
171170
},
172171
}},
173172
}

cmd/varlogsn/cli.go

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ func newStartCommand() *cli.Command {
9595
flags.LogFileCompression,
9696
flags.LogHumanReadable,
9797
flags.LogLevel,
98+
flags.EnableDevelopmentMode,
9899

99100
// telemetry
100101
flags.TelemetryExporter,

cmd/varlogsn/testdata/varlogsn.ct

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ OPTIONS:
4242

4343
Logger:
4444

45+
--enable-development-mode Enable development mode for the logger. Panics on DPanic-level logs if true. (default: false) [$ENABLE_DEVELOPMENT_MODE]
4546
--log-human-readable Human-readable output. (default: false) [$LOG_HUMAN_READABLE]
4647
--logdir value, --log-dir value Directory for the log files. [$LOGDIR, $LOG_DIR]
4748
--logfile-compression Compress backup log files. (default: false) [$LOGFILE_COMPRESSION]

cmd/varlogsn/varlogsn.go

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ func start(c *cli.Context) error {
4242
if err != nil {
4343
return err
4444
}
45-
logOpts = append(logOpts, log.WithZapLoggerOptions(zap.AddStacktrace(zap.DPanicLevel)))
4645
logger, err := log.New(logOpts...)
4746
if err != nil {
4847
return err

internal/flags/logger.go

+15
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77

88
"github.com/urfave/cli/v2"
9+
"go.uber.org/zap"
910
"go.uber.org/zap/zapcore"
1011

1112
"github.com/kakao/varlog/pkg/util/log"
@@ -113,6 +114,14 @@ var (
113114
Value: DefaultLogLevel,
114115
Usage: "Log levels, either debug, info, warn, or error case-insensitively.",
115116
}
117+
118+
EnableDevelopmentMode = &cli.BoolFlag{
119+
Name: "enable-development-mode",
120+
Category: CategoryLogger,
121+
EnvVars: []string{"ENABLE_DEVELOPMENT_MODE"},
122+
Value: false,
123+
Usage: "Enable development mode for the logger. Panics on DPanic-level logs if true.",
124+
}
116125
)
117126

118127
func ParseLoggerFlags(c *cli.Context, maybeLogFileName string) (opts []log.Option, err error) {
@@ -152,5 +161,11 @@ func ParseLoggerFlags(c *cli.Context, maybeLogFileName string) (opts []log.Optio
152161
}
153162
opts = append(opts, log.WithLogLevel(level))
154163

164+
var zapOpts []zap.Option
165+
if c.Bool(EnableDevelopmentMode.Name) {
166+
zapOpts = append(zapOpts, zap.Development())
167+
}
168+
opts = append(opts, log.WithZapLoggerOptions(zapOpts...))
169+
155170
return opts, nil
156171
}

pkg/util/log/log_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package log
33
import (
44
"testing"
55

6+
"github.com/stretchr/testify/assert"
7+
"github.com/stretchr/testify/require"
68
"go.uber.org/goleak"
79
"go.uber.org/zap"
810
)
@@ -19,6 +21,39 @@ func ExampleLogger() {
1921
logger.Info("this is log", zap.String("example", "first"))
2022
}
2123

24+
func TestEnableDevelopmentMode(t *testing.T) {
25+
tcs := []struct {
26+
name string
27+
zapOpts []zap.Option
28+
assertFunc func(t require.TestingT, f assert.PanicTestFunc, msgAndArgs ...any)
29+
}{
30+
{
31+
name: "DevelopmentMode",
32+
zapOpts: []zap.Option{zap.Development()},
33+
assertFunc: require.Panics,
34+
},
35+
{
36+
name: "ProductionMode",
37+
zapOpts: nil,
38+
assertFunc: require.NotPanics,
39+
},
40+
}
41+
42+
for _, tc := range tcs {
43+
t.Run(tc.name, func(t *testing.T) {
44+
logger, err := New(WithZapLoggerOptions(tc.zapOpts...))
45+
require.NoError(t, err)
46+
defer func() {
47+
_ = logger.Sync()
48+
}()
49+
50+
tc.assertFunc(t, func() {
51+
logger.DPanic("panic occur")
52+
})
53+
})
54+
}
55+
}
56+
2257
func TestMain(m *testing.M) {
2358
goleak.VerifyTestMain(m)
2459
}

0 commit comments

Comments
 (0)