vertx LoggerHandler没有添加logback

时间:2015-07-15 06:26:55

标签: java logging slf4j vert.x

我正在尝试使用LoggerHandler记录所有传入的请求。我正在使用logback.xml来指定appender。我正在为日志记录设置系统属性。

System.setProperty("org.vertx.logger-delegate-factory-class-name",
            "org.vertx.java.core.logging.impl.SLF4JLogDelegateFactory");

仍然是在控制台中记录所有内容而不是文件。

3 个答案:

答案 0 :(得分:5)

这适用于Vert.x 3.4.1:

    import static io.vertx.core.logging.LoggerFactory.LOGGER_DELEGATE_FACTORY_CLASS_NAME;
    import io.vertx.core.logging.LoggerFactory;

    // ...

    setProperty (LOGGER_DELEGATE_FACTORY_CLASS_NAME, SLF4JLogDelegateFactory.class.getName ());
    LoggerFactory.getLogger (LoggerFactory.class); // Required for Logback to work in Vertx

关键是要获得一个记录器,我猜这个记录器初始化了Logging子系统,用来获取Logger的类似乎与我尝试使用两个不同的类似无关。

我将这些行作为生产代码和测试中的第一个程序运行,以便在两种情况下都能正常工作。

答案 1 :(得分:2)

我可以通过设置VM选项来使其工作:

record

然后在我的log4j.properties中,我不得不添加:

emit

答案 2 :(得分:0)

我知道这个问题已经有点老了,但是我能够使顶点LoggerHandler不使用JUL的唯一方法是按如下所述设置系统属性后调用LoggerFactory.initialise()问题。

更好的是,我在build.gradle中设置了属性,如下所示:

run {
  systemProperty(
    "vertx.logger-delegate-factory-class-name",
    "io.vertx.core.logging.SLF4JLogDelegateFactory"
  )
  args = ['run', mainVerticleName, "--redeploy=$watchForChange", "--launcher-class=$mainClassName", "--on-redeploy=$doOnChange",
          "-Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.SLF4JLogDelegateFactory" ]
}

然后在我的MainVerticle::start的最顶端,有:

LoggerFactory.initialise()

然后,繁荣。现在一切都已正确格式化,包括所有启动输出。