コンテキスト: Flume NG 1.5.0.1 および Log4j 2.0.2 の Log4jAppender を使用して、アプリケーションからログ イベントをストリーミングし、FLume エージェントを削除しようとしています。リモート Flume エージェントがシャットダウンされるまで、実際のアプリケーションで問題なく動作します。Logger の info メソッドで明らかに処理されない NPE が発生しています。
次の 2 つのことをうまく機能させたいと考えています。
- アプリケーションは、リモート Flume エージェントが利用できないことを処理し、再接続する必要があります。
- アプリケーション コードは、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