Elasticsearch:无法导入记录器(答案适用于其他导入)

时间:2016-04-24 07:30:38

标签: logging 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工作?

1 个答案:

答案 0 :(得分: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.policymy.policy文件的最小内容应为:

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

当然,您需要重新启动ES才能使更改生效。