2016-01-14 142 views
1

我有一個自定義的LogBack appender。使用appender和自定義appender的類被編譯爲一個jar文件。該應用程序在DSE Spark集羣上運行。我已經在每個節點上做了logback.xml更改。當我運行應用程序,我看到錯誤自定義LogBack appender失敗,java.lang.ClassNotFoundException

17:39:35,039 |-ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [com.test.logger.CassandraAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type com.test.logger.CassandraAppender 

Caused by: java.lang.ClassNotFoundException: com.test.logger.CassandraAppender 
     at  at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionH 
elper.java:60) 

jar文件複製到/ home/[爲myuser]目錄,並從那裏執行。什麼不見​​了? Logback在哪裏查找自定義appender?

+0

是你的classpath上的jar嗎?如果沒有添加到類路徑。如果使用eclipse IDE將其添加到IDE中的lib文件夾以方便使用。 –

+0

我使用自定義appender和自定義appender的spark工作都在同一個項目中,因此它們被編譯爲一個jar文件。所以不知道這將如何幫助。 – vishakha

+0

在第60行查看OptionHelper.instantiateByClassNameAndHelper。您在IDE中看到任何錯誤嗎?我只是試圖從你那裏獲得更多信息。 –

回答

0

似乎Logback加載Appender的方式與Spark沒有很好的結合(我遇到了logstash-logback-encoder這個問題)。將包含Appender類的Jar放入${SPARK_HOME}/jars目錄中,我成功了。