kafka-log4j-appender 0.9.0.1省略了错误的可抛出信息

bqucvtff  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(464)

看起来kafka-log4j-appender 0.9.0.1在向kafka发送消息时省略了可丢弃的信息。我正在使用以下配置:

  1. log4j.rootLogger=INFO, stdout
  2. log4j.logger.kafka=INFO, stdout
  3. log4j.logger.com.doublev=INFO, KAFKA
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
  7. log4j.appender.KAFKA=org.apache.kafka.log4jappender.KafkaLog4jAppender
  8. log4j.appender.KAFKA.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.KAFKA.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
  10. log4j.appender.KAFKA.brokerList=localhost:9092
  11. log4j.appender.KAFKA.topic=logs
  12. log4j.appender.KAFKA.syncSend=false

控制台中的输出示例:

  1. ERROR [main] (App.java:21) - / by zero
  2. java.lang.ArithmeticException: / by zero
  3. at com.doublev.sls.test.App.main(App.java:19)

在Kafka那边,它收到:

  1. ERROR [main] (App.java:21) - / by zero
nafvub8i

nafvub8i1#

对我有效的最终配置如下:

  1. log4j.appender.KAFKA=org.apache.kafka.log4jappender.KafkaLog4jAppender
  2. log4j.appender.KAFKA.layout=org.apache.log4j.EnhancedPatternLayout
  3. log4j.appender.KAFKA.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n%throwable
  4. log4j.appender.KAFKA.brokerList=localhost:9092
  5. log4j.appender.KAFKA.topic=logs
  6. log4j.appender.KAFKA.syncSend=false

我也弄明白了为什么strack trace是为 ConsoleAppender 以及 PatternLayout . 可丢弃的信息由 ConsoleAppender 前任- WriterAppender :

  1. protected
  2. void subAppend(LoggingEvent event) {
  3. this.qw.write(this.layout.format(event));
  4. if(layout.ignoresThrowable()) {
  5. String[] s = event.getThrowableStrRep();
  6. if (s != null) {
  7. int len = s.length;
  8. for(int i = 0; i < len; i++) {
  9. this.qw.write(s[i]);
  10. this.qw.write(Layout.LINE_SEP);
  11. }
  12. }
  13. }
  14. if(shouldFlush(event)) {
  15. this.qw.flush();
  16. }
  17. }
展开查看全部
gg58donl

gg58donl2#

Kafka附录有相当广泛的设置。请参见以下内容:

  1. log4j.appender.KAFKA.compressionType=none
  2. log4j.appender.KAFKA.requiredNumAcks=0
  3. log4j.appender.KAFKA.syncSend=true //did you try false here?
  4. log4j.appender.KAFKA.Serializer=kafka.producer.DefaultStringEncoder

也请使用

  1. log4j.appender.KAFKA.layout=org.apache.log4j.EnhancedPatternLayout

根据log4j java doc
patternlayout不处理loggingevents中包含的throwable。

相关问题