尝试覆盖vert.x使用的JUL记录器

时间:2018-09-24 03:06:44

标签: vert.x vertx-verticle

我想使用Log4j2,并使用系统属性设置MainVerticle来做到这一点,

public class MainVerticle extends AbstractVerticle
{
    static {
        System.setProperty( "vertx.logger-delegate-factory-class-name",
                            "io.vertx.core.logging.Log4j2LogDelegateFactory" );
        System.setProperty( "log4j2.debug", "true" );
    }
....
}

然后,我从该版本中部署我的HttpVerticle,并且在HTTP垂直版本中,我试图使用不起作用的参数化语句。因此,我添加了一些日志记录语句以显示正在使用的记录器委托以及系统属性:

public class HttpServerVerticle extends AbstractVerticle
{
    private static final Logger LOGGER = LoggerFactory.getLogger( HttpServerVerticle.class );

    @Override
    public void start() throws Exception
    {
        LOGGER.info( System.getProperty( "vertx.logger-delegate-factory-class-name" ) );
        LOGGER.info( LOGGER.getDelegate().getClass().getName() );
        ....

下面在传入消息的处理程序中,我正在使用此代码:

LOGGER.info( "Chat message received: {}" + message.body(), message.body() );

请注意,我使用串联添加message.body()以证明消息不是空字符串。

这些日志语句的输出为:

[INFO] Sep 24, 2018 2:46:09 AM ca.LinkEdTutoring.chat.http.HttpServerVerticle
[INFO] INFO: io.vertx.core.logging.Log4j2LogDelegateFactory
[INFO] Sep 24, 2018 2:46:09 AM ca.LinkEdTutoring.chat.http.HttpServerVerticle
[INFO] INFO: io.vertx.core.logging.JULLogDelegate

以及输入字母“ b”的传入消息:

[INFO] INFO: Chat message received: {}b

我尝试在pom.xml文件和命令行中使用-D参数设置系统属性。

这是vert.x 3.5.3版

对我忘了做什么有什么想法吗?

================

编辑:从注释线程中捕获要点。

  1. 无法在Verticle中设置系统属性,因为vert.x JUL记录器在主Verticle之前启动。
  2. 使用vertx插件运行代码时,无法在pom.xml中设置
  3. 。 vertx初始化后,必须调用mvn vertx插件。
  4. 使用-D vargs似乎唯一可能覆盖命令行的JUL记录器。
  5. 不要忘记在-jar开关之前设置了vargs,即$ java -Dx = y -jar jarname.jar

1 个答案:

答案 0 :(得分:2)

如果使用命令行启动,则可以使用-Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.Log4j2LogDelegateFactory对其进行配置。这是最简单的。

当然,您也可以通过System.setProperty在代码中直接设置它,它与-D设置相同,但是必须在初始化LoggerFactory之前完成。显然,必须在Vertx初始化成功之后执行Verticle子类中的代码。 LoggerFactory已经初始化。