客观的
使用 Elasticsearch 的记录器功能更好地调试服务器端 Groovy 脚本代码。
问题总结
无法导入org.elasticsearch.common.logging.*
Details
- 使用Elasticsearch 2.3
- 脚本存储在
/etc/elasticsearch/scripts
Java 客户端已经能够通过以下方式成功访问它们Client.update()
。也就是说,文件夹位置应该是正确的。我看到了将代码放入的建议elasticsearch/config/scripts
,这实际上对我不起作用)
-
Tried 这个解决方案 https://stackoverflow.com/questions/27981832/access-logger-from-elasticsearch-script/27981891#27981891, 那是:
import org.elasticsearch.common.logging.*
ESLogger logger = ESLoggerFactory.getLogger('myscript')
但 Elasticsearch 日志显示了编译器的抱怨:unable to resolve class org.elasticsearch.common.logging.ESLogger
我在GitHub上查看了源代码here https://github.com/elastic/elasticsearch/tree/0f00c14afc8428a2a72c0b766d2171029dc8f6e1/core/src/main/java/org/elasticsearch/common/loggingESLogger 类就在那里。所以我不知道为什么会发生这种情况。
有人对获得import
上班?
其原因是Elasticsearch 2.2 中已启用用于脚本编写的 Java 安全管理器 https://www.elastic.co/guide/en/elasticsearch/reference/current/float.html#_scripting_and_security。这意味着您需要遵守规则并配置您希望脚本能够访问哪些类 https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-security.html.
为了能够在脚本中进行日志记录,我定义了自己的策略文件并将其设置为 JAVA_OPTS ,甚至在启动命令中设置为-Djava.security.policy=file:///D:/ES/elasticsearch-2.3.1/my.policy
. The minimum的内容my.policy
文件应该是:
grant {
permission org.elasticsearch.script.ClassPermission "org.elasticsearch.common.logging.*";
permission org.elasticsearch.script.ClassPermission "org.apache.log4j.*";
};
当然,需要重启ES才能使更改生效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)