【问题标题】:Elasticsearch: Unable to import logger (answer applies to other imports)Elasticsearch:无法导入记录器(答案适用于其他导入)
【发布时间】:2017-02-24 19:07:09
【问题描述】:

目标

使用 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 工作有什么建议吗?

【问题讨论】:

    标签: logging elasticsearch


    【解决方案1】:

    原因是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 才能使更改生效。

    【讨论】:

    • 这仍然适用于 ES 6.3 吗?我已经在/modules/lang-painless/plugin-security.policy 中直接编辑了授予权限,但它似乎不起作用
    • 在如此遥远的版本中很可能无法正常工作。中间有很多版本。
    猜你喜欢
    • 2023-04-10
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    相关资源
    最近更新 更多