我正在尝试使用LoggerHandler记录所有传入的请求。我正在使用logback.xml来指定appender。我正在为日志记录设置系统属性。
System.setProperty("org.vertx.logger-delegate-factory-class-name",
"org.vertx.java.core.logging.impl.SLF4JLogDelegateFactory");
仍然是在控制台中记录所有内容而不是文件。
答案 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()
然后,繁荣。现在一切都已正确格式化,包括所有启动输出。