2016-04-24 62 views
4

目的Elasticsearch:無法導入記錄器(答案也適用於其他進口)

要使用Elasticsearch的記錄功能,以更好地調試服務器端的Groovy腳本代碼。

問題摘要

無法導入org.elasticsearch.common.logging.*

詳細

  • 使用Elasticsearch 2.3存儲在/etc/elasticsearch/scripts
  • 腳本和Java客戶端通過能夠訪問它們成功Client.update()。也就是說,文件夾位置應該是正確的。我見過的建議放置代碼elasticsearch/config/scripts,這實際上並沒有爲我工作)
  • 試過this solution,即:

    import org.elasticsearch.common.logging.*
    ESLogger logger = ESLoggerFactory.getLogger('myscript')

    但Elasticsearch日誌顯示一個編譯器投訴: unable to resolve class org.elasticsearch.common.logging.ESLogger

我檢查的源代碼在GitHub here和ESLogger類在那裏。所以我不知道爲什麼會發生這種情況。

有沒有人有建議讓import工作?

回答

5

原因是Java Security Manager that has been enabled in Elasticsearch 2.2 for scripting。這意味着您需要遵循規則和configure which classes you want your script to be able to access

爲了能夠在腳本中進行日誌記錄工作我已經定義了自己的策略文件並將其設置爲JAVA_OPTS,或者甚至在啓動命令中設置爲-Djava.security.policy=file:///D:/ES/elasticsearch-2.3.1/my.policy。該最低內容my.policy文件的應該是:

grant { 
    permission org.elasticsearch.script.ClassPermission "org.elasticsearch.common.logging.*"; 
    permission org.elasticsearch.script.ClassPermission "org.apache.log4j.*"; 
}; 

當然,你需要重新啓動ES以使更改生效。

相關問題