我想使用log4j来记录spark流处理过程中发生的业务异常。尽管我想集中查看我的所有日志(不是集群中每个节点上的日志的一部分),但我还是想将日志发送到kafka,然后创建kafka consumer,将它们聚合在一起。
我创建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),并尝试记录某些消息,但在console和kafka中都没有看到它们。
有什么建议吗?
[编辑]我已经意识到我的自定义log4j.properties就是所使用的属性(因为不会打印低于error的消息,因为它是在root logger中设置的)。但是,没有任何自定义消息打印到输出,也没有添加到kafka。
我不知道是什么问题
暂无答案!
目前还没有任何答案,快来回答吧!