【问题标题】:kafka-log4j-appender 0.9.0.1 omits throwable information for errorskafka-log4j-appender 0.9.0.1 省略了错误的可抛出信息
【发布时间】:2016-07-18 15:40:14
【问题描述】:

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

log4j.rootLogger=INFO, stdout
log4j.logger.kafka=INFO, stdout
log4j.logger.com.doublev=INFO, KAFKA

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

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

控制台中的示例输出:

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

在 Kafka 方面它接收:

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

【问题讨论】:

    标签: java log4j apache-kafka appender


    【解决方案1】:

    适合我的最终配置如下:

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

    我还弄清楚了为什么会为 ConsoleAppenderPatternLayout 打印轨迹跟踪。可投掷信息由ConsoleAppender前任-WriterAppender处理:

    protected
      void subAppend(LoggingEvent event) {
        this.qw.write(this.layout.format(event));
    
        if(layout.ignoresThrowable()) {
          String[] s = event.getThrowableStrRep();
          if (s != null) {
        int len = s.length;
        for(int i = 0; i < len; i++) {
          this.qw.write(s[i]);
          this.qw.write(Layout.LINE_SEP);
        }
          }
        }
    
        if(shouldFlush(event)) {
          this.qw.flush();
        }
      }
    

    【讨论】:

      【解决方案2】:

      Kafka appender 有相当广泛的设置。请参阅以下内容:

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

      也请使用

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

      根据 log4j java doc

      PatternLayout 不处理其中包含的 throwable 记录事件。

      【讨论】:

      • 感谢EnhancedPatternLayout的新想法,我终于把我在下一个答案中添加的配置提出来了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多