Встроенный Kafka Appender не работает с Log4j2 xml - PullRequest
1 голос
/ 03 мая 2019

Я хочу написать модульный тест для Kafka Appender, используя log4j2 xml. Я использую встроенный kafka, но он не может инициализировать $ {spring.embedded.kafka.brokers} это свойство.

Я получаю эту ошибку

java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:96)
    ... 17 more
Caused by: org.apache.kafka.common.config.ConfigException: Invalid url in bootstrap.servers: ${spring.embedded.kafka.brokers}
    at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:51)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:406)
    ... 38 more

Log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info">
    <Properties>
        <Property name="bootstrapServers">${bundle:application:kafka.bootstrap-servers}</Property>
        <Property name="securityProtocol">${bundle:application:kafka.security.protocol}</Property>
    </Properties>
    <Appenders>

        <Kafka name="kafkaAppender" topic="ERROR_TOPIC_DEV">
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" />
            </Filters>
            <JSONLayout />

            <Property name="bootstrap.servers">${bootstrapServers}</Property>
            <Property name="security.protocol">${securityProtocol}</Property>  
        </Kafka>
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <Filters>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" />
            </Filters>
           <JSONLayout/>
        </Console>

    </Appenders>
    <Loggers>
        <Root level="Info">
            <AppenderRef ref="kafkaAppender"/>
            <AppenderRef ref="consoleAppender"/>
        </Root>
        <Logger name="org.apache.kafka" level="Info" />
    </Loggers>
</Configuration>

application.properties

kafka.bootstrap-servers=${spring.embedded.kafka.brokers}
kafka.security.protocol=PLAINTEXT

Выше я пытаюсь взять bootstrapServers из application.properties, но он не может инициализировать $ {spring.embedded.kafka.brokers} это свойство. С другой стороны, я получаю значение для securityProtocol, потому что это строка. Заранее спасибо.

...