我正在尝试使用splunk的logback appender直接在我的Java应用程序中记录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 :(得分:6)
问题似乎是单元测试JVM将在Splunk后台线程完成日志上载之前退出。
Splunk的回溯适配器使用后台线程批量发送消息到服务器。批处理由batch_interval
,batch_size_bytes
和batch_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超时,因此如果端点无法访问,则连接可能需要几分钟才能超时并显示错误消息。
编辑:事实证明,url
中的logback.xml
参数也存在问题。必须指定URL而不指定路径,例如http://mySplunkUrl:8088/
不是http://mySplunkUrl:8088/services/collector