来自 Javascript 的 Vertx 3 应用程序日志记录

Vertx 3 application logging from Javascript

有时在开发过程中将事情记录到控制台是很好的。在我正在创建的 Vert.x 3 项目中,我正在尝试按照 Vert.x 3 文档页面上的说明进行日志记录:

http://vert-x3.github.io/docs/vertx-core/js/#_logging_from_your_application

文档提供了这个示例代码:

// Note -these classes are Java only

// You would normally maintain one static instance of Logger per Java class:

var logger = Java.type("io.vertx.core.logging.LoggerFactory").getLogger(className);

logger.info("something happened");
logger.error("oops!", exception);

编译时,"var logger = ..." 行出现以下错误:

Failed in deploying verticle java.lang.RuntimeException: java.lang.ClassNotFoundException: io.vertx.core.logging.LoggerFactory at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:391) at jdk.nashorn.internal.scripts.Script$Recompilation95AAAAA$\^eval_.L:27$_load(null:107) at jdk.nashorn.internal.scripts.Script$Recompilation36AAAA$\^eval_.L:27$doRequire(null:149) at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:644) at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:229)

(注意:"className" 变量看起来也很可疑。它没有在任何地方说明它应该是什么,目前在编译时它是 "undefined")

有什么想法吗?

这是因为版本在 Vertx 3 里程碑中略有不同步。该文档已经反映了里程碑 7 中即将发生的变化,其中 class 包是:

    io.vertx.core.logging.LoggerFactory

但是,在里程碑 6 中您需要使用:

    io.vertx.core.logging.impl.LoggerFactory

如果您将代码更新为:

    var logger = Java.type("io.vertx.core.logging.impl.LoggerFactory").getLogger(className);

应该可以。