[英]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.