Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使用logback appender登录到Splunk_Java_Logback_Splunk - Fatal编程技术网

Java 尝试使用logback appender登录到Splunk

Java 尝试使用logback appender登录到Splunk,java,logback,splunk,Java,Logback,Splunk,我正试图使用splunk的logbackappender直接在Java应用程序中登录到splunk <appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender"> <url>http://mySplunkUrl:8088/services/collector</url> <token>1234566789</toke

我正试图使用splunk的logbackappender直接在Java应用程序中登录到splunk

  <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>
似乎没有什么东西会splunk,但当我在REST客户机中手动发出post命令时,我在splunk中看到了我的数据

  <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>
我也无法让官方的splunk logback测试起作用

  <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>
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>
这是我试图使用的文档:

  <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>
我错过了什么明显的东西吗

  <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>
编辑
这里有一个指向我的项目的链接-

问题似乎是,在Splunk后台线程完成日志上传之前,单元测试JVM将退出

  <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>
Splunk的Logback适配器使用后台线程将消息批量发送到服务器。批处理由
batch\u interval
batch\u size\u bytes
batch\u size\u count
参数控制。即使它们都设置为非常低的级别,单元测试JVM也可能在线程完成之前退出并杀死线程

  <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>
尝试在测试方法的末尾添加睡眠,例如

  <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>
Thread.sleep(5000);
此外,由于某些错误,发送可能会失败。通过添加以下代码片段来捕获Splunk发送方失败,可以解决这些问题:

  <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>
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();
    }
});
HttpEventCollectorErrorHandler.onError(新的HttpEventCollectorErrorHandler.ErrorCallback(){
公共无效错误(最终列表事件、最终异常){
//修正:将堆栈跟踪转储到STDERR不适合生产使用!
例如printStackTrace();
}
});
请注意,似乎没有设置任何HttpClient超时,因此,如果无法访问终结点,连接可能需要几分钟才能超时并显示错误消息

  <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>

编辑:原来
logback.xml
中的
url
参数也有问题。指定的URL必须没有路径,例如
http://mySplunkUrl:8088/
http://mySplunkUrl:8088/services/collector

您可以将项目的.zip发送到devinfo@splunk.com? 如果我对你的项目有更多的了解,我可以帮你configured@Shakeel好的,我刚发出去。@Catfish你能发布单元测试的导入行吗。不清楚测试是否使用Slf4j或Logback
Logger
LoggerFactory
类。正在使用哪些日志依赖项?这是一个maven项目吗?如果是,您可以粘贴
pom.xml
的相关部分吗。如果您也能与其他读者共享zip,那就太好了;)@anttix ok我用一个链接更新了问题,并将代码放在github上。添加
Thread.sleep(5000)
无效。我还将此项目作为一个依赖项添加到另一个项目中,并在我的服务器上运行它,但它仍然没有向splunk发送日志。因此,我发现在我的服务器上运行项目时,我的logback.xml被依赖项的logback.xml覆盖。我添加了这个代码片段以查看splunk发送者失败,现在我收到了这个错误
{“text”:“在这个服务器上找不到请求的URL。”,“code”:404}
。我已经直接发布到了我的appender中的url。查看
HttpEventCollectorSender
代码,似乎一个路径(
/services/collector/event/1.0
)会自动附加到url。我会尝试在
logback.xml
中去掉URL的尾部,例如
http://example.com:8088/services/collector
->
http://example.com:8088/
Bingo!成功了!你能给我指一下你发现url被追加的文档吗?老实说,问题中链接到的Splunk文档确实以
%scheme%://%host%:%port%
的格式指定了url,但是由于它是以占位符格式表示的,所以很难阅读,因此很容易忽略。
  <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>