簡體   English   中英

vertx LoggerHandler沒有添加logback

[英]vertx LoggerHandler not adding logback

我正在嘗試使用LoggerHandler記錄所有傳入的請求。 我正在使用logback.xml來指定appender。 我正在為日志記錄設置系統屬性。

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

它仍然在控制台中記錄所有內容而不是文件。

這適用於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的類似乎無關緊要,因為我嘗試了兩個不同的。

我將這些行作為生產代碼中的第一個程序運行, 並在測試中在兩個上下文中正常工作。

通過設置VM選項,我能夠讓它工作:

-Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.Log4jLogDelegateFactory

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

log4j.category.io.vertx = TRACE

我知道這個問題有點老了,但是我能夠讓Vertx 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()

繁榮。 現在一切都正確格式化,包括所有啟動輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM