1

我想使用 log4j 记录在我的 spark 流式处理过程中发生的业务异常。虽然我想集中概览我的所有日​​志(不是集群中每个节点上的日志的一部分),但我想将日志发送到 Kafka,然后创建 Kafka 消费者,它将它们聚合在一起。

我创建 log4j.properties 文件并将其放在 main/resources 中。它看起来像这样:

# Kafka Appender
# define appender type
log4j.appender.KafkaAppender=kafka.producer.KafkaLog4jAppender
# brokerList
log4j.appender.KafkaAppender.brokerList= localhost:9092
# set the Kafka topic
log4j.appender.KafkaAppender.topic=logTopic
#define the layout
log4j.appender.KafkaAppender.layout=org.apache.log4j.PatternLayout
#date,  message, \n
log4j.appender.KafkaAppender.layout.ConversionPattern= %d-     %m%n

#console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L %% %m%n

# my custom logging to Kafka and stdout
log4j.logger.kafkaLogger = WARN, console, KafkaAppender

#root logger
log4j.rootCategory = ERROR, console

为了避免发出序列化,我也这样做了:

@transient lazy val kafkaLogger = org.apache.log4j.LogManager.getLogger("kafkaLogger")`

在可序列化的对象内。在同一个可序列化对象中是我所有的方法,它们使用 kafkaLogger。

在方法中,我编写了 kafkaLogger.warn(message),并尝试记录某些消息,但我没有看到它们写在控制台中,也没有写在 Kafka 中。

有什么建议么?

[编辑] 我已经意识到我的自定义 log4j.properties 是使用的(因为没有打印低于 ERROR 的消息,因为它是在根记录器中设置的)。但是,没有任何自定义消息被打印到输出中,也没有被添加到 Kafka。

我不知道是什么问题

4

0 回答 0