I met this exception when using syslogappender.

my log4j version is 1.2.16.

Any idea?  thanks.




java.lang.NoSuchFieldError: errorHandler
        at 
org.apache.log4j.net.SyslogAppender.setSyslogHost(SyslogAppender.java:391)
~[log4j-1.2.16.jar:na]
        at com.netease.sytopology.util.MySysLogger.<init>(MySysLogger.java:39)
~[stormjar.jar:na]
        at 
com.netease.sytopology.util.MySysLogger.getInstance(MySysLogger.java:28)
~[stormjar.jar:na]
        at 
com.netease.sytopology.bolt.FilterFunction.prepare(FilterFunction.java:65)
~[stormjar.jar:na]
        at 
storm.trident.planner.processor.EachProcessor.prepare(EachProcessor.java:54)
~[storm-core-0.9.4.jar:0.9.4]
        at 
storm.trident.planner.SubtopologyBolt.prepare(SubtopologyBolt.java:121)
~[storm-core-0.9.4.jar:0.9.4]
        at 
storm.trident.topology.TridentBoltExecutor.prepare(TridentBoltExecutor.java:231)
~[storm-core-0.9.4.jar:0.9.4]
        at 
backtype.storm.daemon.executor$fn__4722$fn__4734.invoke(executor.clj:692)
~[storm-core-0.9.4.jar:0.9.4]
        at backtype.storm.util$async_loop$fn__458.invoke(util.clj:461)
~[storm-core-0.9.4.jar:0.9.4]
        at clojure.lang.AFn.run(AFn.java:24) [clojure-1.5.1.jar:na]
        at java.lang.Thread.run(Thread.java:745) [na:1.7.0_67]


And here is my code:


import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import org.apache.log4j.PatternLayout;

import org.apache.log4j.helpers.OnlyOnceErrorHandler;

import org.apache.log4j.net.SyslogAppender;

import org.apache.log4j.varia.FallbackErrorHandler;


public class MySysLogger {

//以下参数均可根据需要放到配置文件中。

//默认日志级别

private static Level level = Level.INFO;

//日志接收服务器

private static String syslogHost = "172.16.1.18";

//设置facility

private static String facility = "local7";

private static String  loggerName = "";


public static void setLoggerName(String loggerName2) {

MySysLogger.loggerName = loggerName2;

}


private static Logger LOG = null;


public static synchronized Logger getInstance() {

if (LOG == null) {

new MySysLogger(loggerName);

}

return LOG;

}


private  MySysLogger(String loggerName) {


LOG = Logger.getRootLogger();

LOG.setLevel(level);

SyslogAppender appender = new SyslogAppender();

appender.setErrorHandler(new FallbackErrorHandler());


appender.setSyslogHost(syslogHost);

appender.setLayout(new PatternLayout(

"%r " + loggerName +" [%t] %-5p %C%x - %m"));

appender.setHeader(true);

appender.setFacility(facility);

LOG.addAppender(appender);

}


}

Reply via email to