{"record":{"id":"4e78a80866cd17f8","repo":"caddyserver/caddy","slug":"setting-up-default-log-v","errorCode":null,"errorMessage":"setting up default log: %v","messagePattern":"setting up default log: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"logging.go","lineNumber":159,"sourceCode":"\n\t// extract the user-defined default log, if any\n\tnewDefault := new(defaultCustomLog)\n\tif userDefault, ok := logging.Logs[DefaultLoggerName]; ok {\n\t\tnewDefault.CustomLog = userDefault\n\t} else {\n\t\t// if none, make one with our own default settings\n\t\tvar err error\n\t\tnewDefault, err = newDefaultProductionLog()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"setting up default Caddy log: %v\", err)\n\t\t}\n\t\tlogging.Logs[DefaultLoggerName] = newDefault.CustomLog\n\t}\n\n\t// options for the default logger\n\toptions, err := newDefault.CustomLog.buildOptions()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"setting up default log: %v\", err)\n\t}\n\n\t// set up this new log\n\terr = newDefault.CustomLog.provision(ctx, logging)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"setting up default log: %v\", err)\n\t}\n\n\tfilteringCore := &filteringCore{newDefault.CustomLog.core, newDefault.CustomLog}\n\tnewDefault.logger = zap.New(filteringCore, options...)\n\n\t// redirect the default caddy logs\n\tdefaultLoggerMu.Lock()\n\toldDefault := defaultLogger\n\tdefaultLogger = newDefault\n\tdefaultLoggerMu.Unlock()\n\n\t// if the new writer is different, indicate it in the logs for convenience","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/caddyserver/caddy/blob/50e54ee279aa1e504fe218ca49ab6ae16c100410/logging.go#L141-L177","documentation":"While setting up the default log, Caddy builds zap logger options from the default CustomLog (buildOptions). This error wraps a failure in that option construction — typically an invalid level, sampling, or encoding configuration carried on the default log definition.","triggerScenarios":"A user-defined log named 'default' whose fields are invalid: bad level string, malformed sampling config, or an encoder configuration buildOptions cannot turn into zap options.","commonSituations":"JSON config defining logging.logs.default with non-zap-compatible values; upgrading Caddy versions where accepted option shapes changed; hand-edited adapted configs.","solutions":["Inspect the wrapped error; it names which option failed.","Simplify the default log first (just writer + level) and re-add options one at a time.","Cross-check level and sampling fields against current docs for the Caddy version in use.","Use 'caddy adapt --pretty' to regenerate canonical JSON from a Caddyfile."],"exampleFix":"// before\n\"default\": { \"level\": \"VERBOSE\" }\n// after\n\"default\": { \"level\": \"DEBUG\" }","handlingStrategy":"validation","validationCode":"var validLevels = map[string]bool{\"DEBUG\": true, \"INFO\": true, \"WARN\": true, \"ERROR\": true}\n\nfunc levelOK(l string) bool { return validLevels[strings.ToUpper(l)] }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Restrict default-log overrides to well-known fields (level, writer).","Re-adapt Caddyfile to JSON rather than hand-editing option objects."],"tags":["logging","default-log","options","config"],"backgroundTag":null,"analyzedSha":"50e54ee279aa1e504fe218ca49ab6ae16c100410","analyzedAt":"2026-08-15T09:20:21.641Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}