{"record":{"id":"a3d498f2002d5ea6","repo":"zhisheng17/flink-learning","slug":"the-bootstrap-servers-property-must-be-specified-a3d498","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/Log4jKafkaAppender/src/main/java/com/zhisheng/log/appender/KafkaLog4jAppender.java","lineNumber":92,"sourceCode":"            if (log.contains(\"jobmanager\")) {\n                containerType = \"jobmanager\";\n            } else if (log.contains(\"taskmanager\")) {\n                containerType = \"taskmanager\";\n            } else {\n                containerType = \"others\";\n            }\n        } else {\n            log.error(\"log.file Property ({}) doesn't contains yarn application id or container id\", logFile);\n        }\n\n        taskId = envProperties.getProperty(\"taskId\", null);\n        taskName = envProperties.getProperty(\"taskName\", null);\n\n        Properties props = new Properties();\n        if (this.bootstrapServers != null) {\n            props.setProperty(\"bootstrap.servers\", this.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        if (this.source == null) {\n            throw new ConfigException(\"Source 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 (this.acks != null) {\n            props.setProperty(\"acks\", this.acks);\n        } else {\n            props.setProperty(\"acks\", \"0\");","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/zhisheng17/flink-learning/blob/d731cee7618021be56d132cc925102ffff8d75e6/flink-learning-extends/FlinkLogKafkaAppender/Log4jKafkaAppender/src/main/java/com/zhisheng/log/appender/KafkaLog4jAppender.java#L74-L110","documentation":"The Log4j 1.x KafkaLog4jAppender validates its options in activateOptions(). It throws ConfigException when bootstrapServers was not set (neither via the BootstrapServers option nor the bootstrap.servers property in log4j.properties), because the producer cannot connect without it.","triggerScenarios":"log4j.properties defining com.zhisheng.log.appender.KafkaLog4jAppender without BootstrapServers, then logger initialization calls activateOptions().","commonSituations":"Misspelled key ('boostrap.servers'); property provided only in a different config file; migrating configs between environments where the property was dropped.","solutions":["Add log4j.appender.kafka.BootstrapServers=broker1:9092,broker2:9092 to log4j.properties.","Or provide bootstrap.servers as one of the appender's properties.","Confirm the log4j.properties in use at runtime contains the key (no shadowing config).","Validate broker connectivity with kafka-console-producer using the same bootstrap list."],"exampleFix":"// before (log4j.properties)\nlog4j.appender.kafka=com.zhisheng.log.appender.KafkaLog4jAppender\nlog4j.appender.kafka.Topic=app-logs\n// after\nlog4j.appender.kafka=com.zhisheng.log.appender.KafkaLog4jAppender\nlog4j.appender.kafka.BootstrapServers=broker1:9092,broker2:9092\nlog4j.appender.kafka.Topic=app-logs","handlingStrategy":"validation","validationCode":"java.util.Properties p = new java.util.Properties();\np.load(new FileInputStream(\"log4j.properties\"));\nif (p.getProperty(\"log4j.appender.kafka.BootstrapServers\") == null)\n    throw new IllegalStateException(\"BootstrapServers missing for KafkaLog4jAppender\");","typeGuard":null,"tryCatchPattern":"try {\n    PropertyConfigurator.configure(\"log4j.properties\");\n} catch (Throwable t) {\n    System.err.println(\"Log4j Kafka appender config error: \" + t.getMessage());\n}","preventionTips":["Always set BootstrapServers in log4j.properties appender blocks","Validate log4j.properties keys in CI before deployment","Use environment-agnostic placeholders substituted at deploy time","Check key spelling: BootstrapServers, not bootstrap.servers as a bare option"],"tags":["kafka","log4j","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"}