diff --git a/.golangci.next.reference.yml b/.golangci.next.reference.yml index 708cf8048c17..f708e27716ad 100644 --- a/.golangci.next.reference.yml +++ b/.golangci.next.reference.yml @@ -2032,6 +2032,9 @@ linters-settings: # Allow check for the github.com/go-logr/logr library. # Default: true logr: false + # Allow check for the log/slog library. + # Default: true + slog: false # Allow check for the "sugar logger" from go.uber.org/zap library. # Default: true zap: false diff --git a/.golangci.reference.yml b/.golangci.reference.yml index 708cf8048c17..f708e27716ad 100644 --- a/.golangci.reference.yml +++ b/.golangci.reference.yml @@ -2032,6 +2032,9 @@ linters-settings: # Allow check for the github.com/go-logr/logr library. # Default: true logr: false + # Allow check for the log/slog library. + # Default: true + slog: false # Allow check for the "sugar logger" from go.uber.org/zap library. # Default: true zap: false diff --git a/jsonschema/golangci.jsonschema.json b/jsonschema/golangci.jsonschema.json index 4048750fedf5..4546614f20f9 100644 --- a/jsonschema/golangci.jsonschema.json +++ b/jsonschema/golangci.jsonschema.json @@ -2111,6 +2111,11 @@ "type": "boolean", "default": true }, + "slog": { + "description": "Allow check for the log/slog library.", + "type": "boolean", + "default": true + }, "zap": { "description": "Allow check for the \"sugar logger\" from go.uber.org/zap library.", "type": "boolean", diff --git a/jsonschema/golangci.next.jsonschema.json b/jsonschema/golangci.next.jsonschema.json index 4048750fedf5..4546614f20f9 100644 --- a/jsonschema/golangci.next.jsonschema.json +++ b/jsonschema/golangci.next.jsonschema.json @@ -2111,6 +2111,11 @@ "type": "boolean", "default": true }, + "slog": { + "description": "Allow check for the log/slog library.", + "type": "boolean", + "default": true + }, "zap": { "description": "Allow check for the \"sugar logger\" from go.uber.org/zap library.", "type": "boolean", diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index b182d1e0f1b5..cd72c6b1b491 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -105,6 +105,7 @@ var defaultLintersSettings = LintersSettings{ Kitlog: true, Klog: true, Logr: true, + Slog: true, Zap: true, RequireStringKey: false, NoPrintfLike: false, @@ -687,6 +688,7 @@ type LoggerCheckSettings struct { Kitlog bool `mapstructure:"kitlog"` Klog bool `mapstructure:"klog"` Logr bool `mapstructure:"logr"` + Slog bool `mapstructure:"slog"` Zap bool `mapstructure:"zap"` RequireStringKey bool `mapstructure:"require-string-key"` NoPrintfLike bool `mapstructure:"no-printf-like"` diff --git a/pkg/golinters/loggercheck/loggercheck.go b/pkg/golinters/loggercheck/loggercheck.go index 077e8a512f36..84c8d7363517 100644 --- a/pkg/golinters/loggercheck/loggercheck.go +++ b/pkg/golinters/loggercheck/loggercheck.go @@ -22,6 +22,9 @@ func New(settings *config.LoggerCheckSettings) *goanalysis.Linter { if !settings.Logr { disable = append(disable, "logr") } + if !settings.Slog { + disable = append(disable, "slog") + } if !settings.Zap { disable = append(disable, "zap") } diff --git a/pkg/golinters/loggercheck/testdata/loggercheck_default.go b/pkg/golinters/loggercheck/testdata/loggercheck_default.go index 1a95b246de4c..d96d968a263b 100644 --- a/pkg/golinters/loggercheck/testdata/loggercheck_default.go +++ b/pkg/golinters/loggercheck/testdata/loggercheck_default.go @@ -3,6 +3,7 @@ package loggercheck import ( "fmt" + "log/slog" "github.com/go-logr/logr" "go.uber.org/zap" @@ -26,3 +27,10 @@ func ExampleZapSugarNotChecked() { defer sugar.Sync() sugar.Infow("message", "key1", "value1", "key2") // want `odd number of arguments passed as key-value pairs for logging` } + +func ExampleSlog() { + logger := slog.With("key1", "value1") + + logger.Info("msg", "key1") // want `odd number of arguments passed as key-value pairs for logging` + slog.Info("msg", "key1") // want `odd number of arguments passed as key-value pairs for logging` +} diff --git a/pkg/golinters/loggercheck/testdata/loggercheck_kitlogonly.yml b/pkg/golinters/loggercheck/testdata/loggercheck_kitlogonly.yml index 50dc99cbac70..698895cf4349 100644 --- a/pkg/golinters/loggercheck/testdata/loggercheck_kitlogonly.yml +++ b/pkg/golinters/loggercheck/testdata/loggercheck_kitlogonly.yml @@ -3,4 +3,5 @@ linters-settings: kitlog: true klog: false logr: false + slog: false zap: false diff --git a/pkg/golinters/loggercheck/testdata/loggercheck_logronly.yml b/pkg/golinters/loggercheck/testdata/loggercheck_logronly.yml index 001666b7a268..b7ac0ddf2bd1 100644 --- a/pkg/golinters/loggercheck/testdata/loggercheck_logronly.yml +++ b/pkg/golinters/loggercheck/testdata/loggercheck_logronly.yml @@ -2,4 +2,5 @@ linters-settings: loggercheck: logr: true klog: false + slog: false zap: false diff --git a/pkg/golinters/loggercheck/testdata/loggercheck_slogonly.go b/pkg/golinters/loggercheck/testdata/loggercheck_slogonly.go new file mode 100644 index 000000000000..6175d7645b4b --- /dev/null +++ b/pkg/golinters/loggercheck/testdata/loggercheck_slogonly.go @@ -0,0 +1,12 @@ +//golangcitest:args -Eloggercheck +//golangcitest:config_path testdata/loggercheck_slogonly.yml +package loggercheck + +import "log/slog" + +func ExampleSlogOnly() { + logger := slog.With("key1", "value1") + + logger.Info("msg", "key1") // want `odd number of arguments passed as key-value pairs for logging` + slog.Info("msg", "key1") // want `odd number of arguments passed as key-value pairs for logging` +} diff --git a/pkg/golinters/loggercheck/testdata/loggercheck_slogonly.yml b/pkg/golinters/loggercheck/testdata/loggercheck_slogonly.yml new file mode 100644 index 000000000000..32dcdcadb5fb --- /dev/null +++ b/pkg/golinters/loggercheck/testdata/loggercheck_slogonly.yml @@ -0,0 +1,6 @@ +linters-settings: + loggercheck: + logr: false + klog: false + slog: true + zap: false diff --git a/pkg/golinters/loggercheck/testdata/loggercheck_zaponly.yml b/pkg/golinters/loggercheck/testdata/loggercheck_zaponly.yml index 1ac350893b85..b662ecafc667 100644 --- a/pkg/golinters/loggercheck/testdata/loggercheck_zaponly.yml +++ b/pkg/golinters/loggercheck/testdata/loggercheck_zaponly.yml @@ -2,4 +2,5 @@ linters-settings: loggercheck: logr: false klog: false + slog: false zap: true