{"record":{"id":"61248c878f430b6e","repo":"zhisheng17/flink-learning","slug":"the-bootstrap-servers-property-must-be-specified","errorCode":null,"errorMessage":"The bootstrap servers property must be specified","messagePattern":"The bootstrap servers property must be specified","errorType":"validation","errorClass":"ConfigException","httpStatus":null,"severity":"error","filePath":"flink-learning-extends/FlinkLogKafkaAppender/Log4j2KafkaAppender/src/main/java/com/zhisheng/log/appender/KafkaLog4j2Appender.java","lineNumber":107,"sourceCode":"                    containerType = \"others\";\n                }\n            } else {\n                log.error(\"log.file Property ({}) doesn't contains yarn application id or container id\", logFile);\n            }\n        }\n\n        taskName = envProperties.getProperty(\"taskName\", null);\n        taskId = envProperties.getProperty(\"taskId\", null);\n\n        Properties props = new Properties();\n        for (Property property : properties) {\n            props.put(property.getName(), property.getValue());\n        }\n\n        if (bootstrapServers != null) {\n            props.setProperty(\"bootstrap.servers\", bootstrapServers);\n        } else {\n            throw new ConfigException(\"The bootstrap servers property must be specified\");\n        }\n        if (this.topic == null) {\n            throw new ConfigException(\"Topic must be specified by the Kafka log4j appender\");\n        }\n\n        String clientIdPrefix = taskId != null ? taskId : appId;\n\n        if (clientIdPrefix != null) {\n            props.setProperty(\"client.id\", clientIdPrefix + \"_log\");\n        }\n\n        if (props.getProperty(\"acks\") == null) {\n            props.setProperty(\"acks\", \"0\");\n        }\n\n        if (props.getProperty(\"retries\") == null) {\n            props.setProperty(\"retries\", \"0\");\n        }","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/zhisheng17/flink-learning/blob/d731cee7618021be56d132cc925102ffff8d75e6/flink-learning-extends/FlinkLogKafkaAppender/Log4j2KafkaAppender/src/main/java/com/zhisheng/log/appender/KafkaLog4j2Appender.java#L89-L125","documentation":"KafkaLog4j2Appender (Log4j2) requires the Kafka 'bootstrap.servers' setting to connect to the cluster. During appender initialization, if neither the bootstrapServers attribute nor any property named bootstrap.servers was provided, it throws Kafka's ConfigException and the appender fails to start.","triggerScenarios":"Configuring the appender in log4j2.xml without the bootstrapServers attribute and without a <Property name=\"bootstrap.servers\"> entry, then logging triggers appender start.","commonSituations":"Missing attribute in log4j2.xml; property name misspelled (e.g. 'boostrap.servers'); relying on an environment-specific property that isn't defined in the deployed config.","solutions":["Add bootstrapServers=\"host1:9092,host2:9092\" to the <KafkaLog4j2Appender> element in log4j2.xml.","Or add <Property name=\"bootstrap.servers\">host:9092</Property> inside the appender configuration.","Verify the Kafka brokers are reachable at the configured address.","Check that the deployed log4j2.xml is the one actually being loaded (config file path/sys property)."],"exampleFix":"// before (log4j2.xml)\n<KafkaLog4j2Appender topic=\"app-logs\"/>\n// after\n<KafkaLog4j2Appender topic=\"app-logs\" bootstrapServers=\"broker1:9092,broker2:9092\"/>","handlingStrategy":"validation","validationCode":"String bootstrap = System.getProperty(\"kafka.bootstrap\", \"broker1:9092\");\nif (bootstrap == null || bootstrap.isEmpty())\n    throw new IllegalStateException(\"bootstrap.servers must be set before initializing KafkaLog4j2Appender\");","typeGuard":null,"tryCatchPattern":"try {\n    LOGGER.info(\"startup\");\n} catch (Throwable t) {\n    System.err.println(\"Kafka appender init failed: \" + t.getMessage());\n    // fall back to console appender\n}","preventionTips":["Always set bootstrapServers (or a bootstrap.servers Property) in log4j2.xml","Keep one canonical log4j2.xml template with required attributes filled via variables","Smoke-test logging config in CI with a real broker","Grep deployment configs for 'bootstrapServers' before release"],"tags":["kafka","logging","config"],"backgroundTag":"missing-required-config","analyzedSha":"d731cee7618021be56d132cc925102ffff8d75e6","analyzedAt":"2026-09-06T05:35:08.496Z","contentChangedAt":"2026-09-06T05:35:08.496Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}