如何防止Vertx自动写入日志?

How to prevent Vertx from writing logs automatically?

当使用 Vertx 启动我的 TCP 服务器时,我有以下输出:

[2018-06-04 12:15:45] [FINEST ] Net server listening on 0.0.0.0:/0:0:0:0:0:0:0:0:8600
[2018-06-04 12:15:45] [INFO   ] Server is now listening on port :  8600

我应该是第二行,因为我告诉 Vertx 写它:

    server.listen(res -> {
        if (res.succeeded()) {
            logger.info("Server is now listening on port : {0, number, #}", server.actualPort());
        }
        else {
            logger.error("Server failed to bind");
        }
    });

虽然第一行是由 Vertx 自己编写的。我有点惊讶,因为我在 Vertx 文档的任何地方都看不到会发生这种情况,也看不到如何阻止它发生。

如何让 Vertx 自动停止日志记录?

提前致谢。

嗯,the manual states that vert.x by default uses java.util.logging, often referred to by its nickname JUL. It's configurable so depending on your use case you should be able to tune the log output. Alternatively vert.x can be instructed to use an external logging framework,它们各有优缺点。

JUL 的文档并不是有史以来最有用的散文,幸运的是有很多第三方网站涵盖了该主题,例如 http://tutorials.jenkov.com/java-logging/index.html,但快速 Google 将指向您还有很多其他人。

正在恢复:

  • 您将需要编写一个 logging.properties 文件来反映您想要获得的输出,以及在哪里(在控制台的日志文件 and/or 中)
  • 您必须通过系统将该文件传递给您的 vert.x 应用程序 属性 java.util.logging.config.file

限制某些应用程序部分产生的信息可以通过使用 JUL 中的过滤功能来完成。因此,例如,在您的 logging.properties 中,您可以放置​​

java.util.logging.FileHandler.level=INFO

这会将进入日志文件的日志记录限制为 INFO 或更高级别。例如,这已经消除了您在示例中看到的 vert.x 日志。您还可以限制每个包、包组甚至单个 类 的日志记录。可以在此处找到对这些可能性的很好的描述:java.util.logging: how to set level by logger package (or prefix)?。我认为 vert.x 使用前缀 io.vertx