1

コンテキスト: Flume NG 1.5.0.1 および Log4j 2.0.2 の Log4jAppender を使用して、アプリケーションからログ イベントをストリーミングし、FLume エージェントを削除しようとしています。リモート Flume エージェントがシャットダウンされるまで、実際のアプリケーションで問題なく動作します。Logger の info メソッドで明らかに処理されない NPE が発生しています。

次の 2 つのことをうまく機能させたいと考えています。

  1. アプリケーションは、リモート Flume エージェントが利用できないことを処理し、再接続する必要があります。
  2. アプリケーション コードは、Log4j アペンダーの内部から隔離する必要があります。

例外:

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.プロパティ:

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