2016-11-22 68 views
1

我試圖直接在我的Java應用程序中使用logback appender進行splunk的splunk。試圖使用logback appender登錄到Splunk

似乎沒有什麼東西會崩潰,但是當我在REST客戶端中手動發佈post命令時,我在splunk中看到了我的數據。

我無法獲得正式的splunk logback測試。

logback.xml

<appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender"> 
    <url>http://mySplunkUrl:8088/services/collector</url> 
    <token>1234566789</token> 
    <disableCertificateValidation>true</disableCertificateValidation> 
    <batch_size_count>1</batch_size_count> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%msg</pattern> 
    </layout> 
    </appender> 

    <root level="trace"> 
    <appender-ref ref="SPLUNK" /> 
    </root> 

</configuration> 

單元測試

@Test 
public void splunkLogger() { 
    Logger logger = LoggerFactory.getLogger(LogFactoryTest.class); 
    Date date = new Date(); 
    String jsonMsg = String.format("{event:'CancerCenterTest'}"); 
    logger.info("CancerCenterTest"); 
    logger.info(jsonMsg); 
} 

這是我嘗試使用文檔:http://dev.splunk.com/view/splunk-logging-java/SP-CAAAE7M

我失去了一些東西明顯?

編輯 這裏是我的項目的鏈接 - https://github.com/toymachiner62/splunk-logging

+0

您可以將您的項目的.zip發送到[email protected]嗎?如果我對你的項目配置方式有更多的瞭解,我可以提供幫助 – Shakeel

+0

@ Shakeel好的,我剛剛發送了它。 – Catfish

+0

@Catfish可以發佈單元測試的導入線。目前還不清楚測試是使用Slf4j還是Logback Logger和LoggerFactory類。正在使用哪些日誌記錄依賴關係?這是一個maven項目嗎?如果是這樣,你可以粘貼'pom.xml'的相關部分。如果你可以與其他讀者分享這個zip文件也是很好的;) – anttix

回答

5

這個問題似乎是Splunk的後臺線程完成日誌上傳前一個單元測試JVM將退出。

Splunk的Logback適配器使用後臺線程批量發送消息到服務器。批量由batch_interval,batch_size_bytesbatch_size_count參數控制。即使它們都設置爲非常低的級別,單元測試JVM可能會在完成之前退出並終止該線程。

嘗試在測試方法結尾添加睡眠,例如

Thread.sleep(5000); 

此外,發送可能由於某種錯誤而失敗。這些可以通過添加此代碼段趕上Splunk的發送失敗浮出水面:

HttpEventCollectorErrorHandler.onError(new HttpEventCollectorErrorHandler.ErrorCallback() { 
    public void error(final List<HttpEventCollectorEventInfo> events, final Exception ex) { 
     // FIXME: Dumping stack trace to STDERR is not suitable for production use ! 
     ex.printStackTrace(); 
    } 
}); 

請注意,Splunk HttpEventCollectorSender似乎並沒有被設置任何HttpClient的超時,所以如果端點無法訪問它可能需要幾分鐘的連接超時並出現錯誤消息。

編輯:事實證明,logback.xml中的參數url也存在問題。必須指定URL而沒有路徑,例如http://mySplunkUrl:8088/不是http://mySplunkUrl:8088/services/collector

+0

添加'Thread.sleep(5000)'不起作用。我也將此項目作爲依賴添加到另一個項目中,並將其運行在我的服務器上,但它仍未將日誌發送到splunk。 – Catfish

+0

好的,所以我想通了,當我在我的服務器上運行我的項目時,我的logback.xml被依賴項的logback.xml所覆蓋。我添加了該代碼段以查看splunk發件人失敗,並且現在我收到了此錯誤「{」text「:」在此服務器上找不到請求的URL。「,」code「:404}'。我直接發佈到我在appender中的url .. – Catfish

+1

查看'HttpEventCollectorSender'代碼,似乎路徑('/ services/collector/event/1.0')會自動附加到URL。我會嘗試去掉'logback.xml'中URL的尾部,例如'http://example.com:8088/services/collector' - >'http://example.com:8088 /' – anttix