1

上下文:我们正在尝试使用 Flume NG 1.5.0.1 和 Log4j 2.0.2 中的 Log4jAppender 从应用程序流式传输日志事件以删除 FLume 代理。在远程 Flume 代理关闭之前,实际应用程序运行良好。我们遇到了显然没有在 Logger 的 info 方法中处理的 NPE。

我们希望以下两件事能够正常工作:

  1. 应用程序应处理远程水槽代理不可用并重新连接。
  2. 应用程序代码应该与 Log4j appender 内部隔离。

例外:

LOCAL COUNTER: 163
log4j:ERROR Flume append() failed.
LOCAL COUNTER: 164
log4j:ERROR RPC client creation failed! NettyAvroRpcClient { host: nyc-devintapp03.activehealth.loc, port: 41414 }: RPC connection error
Exception in thread "main" java.lang.NullPointerException
    at org.apache.flume.clients.log4jappender.Log4jAppender.append(Log4jAppender.java:163)
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
    at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
    at org.apache.log4j.Category.callAppenders(Category.java:206)
    at org.apache.log4j.Category.forcedLog(Category.java:391)
    at org.apache.log4j.Category.info(Category.java:666)
    at net.ahm.ce.server.App.main(App.java:18)

资源:

public class App {
    static final Logger logger = Logger.getLogger(App.class);

    public static void main(String[] args) throws Exception {
        String name = ManagementFactory.getRuntimeMXBean().getName();
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            System.out.println("LOCAL COUNTER: " + i);
            logger.info("PID: " + name + " | COUNTER: " + i);
            Thread.sleep(100l);
        }
    }
}

log4j.properties:

log4j.appender.flume=org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname=192.168.4.16
log4j.appender.flume.Port=41414
log4j.appender.flume.UnsafeMode=true
log4j.appender.flume.layout=org.apache.log4j.PatternLayout
log4j.appender.flume.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-4r [%t] %-5p %c{1} %x - %m%n

log4j.rootLogger=DEBUG,flume
4

0 回答 0