{"record":{"id":"911763b270bcecc3","repo":"crowdsecurity/crowdsec","slug":"unknown-level-s-w-911763","errorCode":null,"errorMessage":"unknown level %s: %w","messagePattern":"unknown level (.+?): %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/acquisition/modules/s3/config.go","lineNumber":230,"sourceCode":"\t\treturn errors.New(\"empty s3:// DSN\")\n\t}\n\n\tif len(args) == 2 && args[1] != \"\" {\n\t\tparams, err := url.ParseQuery(args[1])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"could not parse s3 args: %w\", err)\n\t\t}\n\n\t\tfor key, value := range params {\n\t\t\tswitch key {\n\t\t\tcase \"log_level\":\n\t\t\t\tif len(value) != 1 {\n\t\t\t\t\treturn errors.New(\"expected zero or one value for 'log_level'\")\n\t\t\t\t}\n\n\t\t\t\tlvl, err := log.ParseLevel(value[0])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"unknown level %s: %w\", value[0], err)\n\t\t\t\t}\n\n\t\t\t\ts.logger.Logger.SetLevel(lvl)\n\t\t\tcase \"max_buffer_size\":\n\t\t\t\tif len(value) != 1 {\n\t\t\t\t\treturn errors.New(\"expected zero or one value for 'max_buffer_size'\")\n\t\t\t\t}\n\n\t\t\t\tmaxBufferSize, err := strconv.Atoi(value[0])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"invalid value for 'max_buffer_size': %w\", err)\n\t\t\t\t}\n\n\t\t\t\ts.logger.Debugf(\"Setting max buffer size to %d\", maxBufferSize)\n\t\t\t\ts.Config.MaxBufferSize = maxBufferSize\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"unknown parameter %s\", key)\n\t\t\t}","sourceCodeStart":212,"sourceCodeEnd":248,"githubUrl":"https://github.com/crowdsecurity/crowdsec/blob/909b5157986a2b2c2163300fdaef5ed01289f7d2/pkg/acquisition/modules/s3/config.go#L212-L248","documentation":"ConfigureByDSN accepts DSN parameters like `log_level=debug`. When the value given for 'log_level' cannot be parsed by log.ParseLevel, it is rejected with this wrapped error. The library only accepts known logrus level names.","triggerScenarios":"Calling ConfigureByDSN with a DSN containing log_level set to a string that is not a valid level (e.g. `log_level=verbose`, `log_level=warning` when `warn` is expected, or a typo like `log_lvel` value `degub`).","commonSituations":"Typos in acquisition config; users copying levels from other software that uses different naming (e.g. 'warn' vs 'warning', 'verbose'); uppercase-only expectations since ParseLevel is case-insensitive but 'info2' style values are not valid.","solutions":["Use one of the valid level names: panic, fatal, error, warn, warning, info, debug, trace.","Check the DSN for typos in the value after log_level=.","Remove the log_level parameter entirely to use the default level."],"exampleFix":"// before\ncrowdsec-s3://mybucket?log_level=verbose\n// after\ncrowdsec-s3://mybucket?log_level=trace","handlingStrategy":"validation","validationCode":"valid := map[string]bool{\"panic\":true,\"fatal\":true,\"error\":true,\"warn\":true,\"warning\":true,\"info\":true,\"debug\":true,\"trace\":true}\nif !valid[level] { return fmt.Errorf(\"invalid log_level %q\", level) }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep a constant list of accepted level names next to DSN-building code.","Reuse log.ParseLevel yourself before composing the DSN.","Test acquisition DSNs with a config dry-run before deployment."],"tags":["configuration","s3","acquisition","logging"],"backgroundTag":"invalid-enum-value","analyzedSha":"909b5157986a2b2c2163300fdaef5ed01289f7d2","analyzedAt":"2026-09-06T12:27:26.012Z","contentChangedAt":"2026-09-06T12:27:26.012Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}