How to use vert.x logging with Log4j and slf4j
Running vert.x with another logger tool looks easy, however I had a few problems getting this to work, after some reseach, some questions in the vert.x group (Thanks Tim), at least on bug fix by yours truly, it basically works.
First of all, whats the point
vert.x uses java.util.logging by default, which is quite ok for most use cases, however it doesn't support logging of class names, code locations etc, so a more fancy logging framework might be useful. There are many to choose from and everybody probably has their favorite, log4j, slf4j, logback, log4j2.
I personally usually use slf4j and log4j as backend for development (and simple logger for live systems, though I do not really have much of “live” things since we use other tools on my work projects), when running inside Eclipse, logback may be a good idea, somebody suggested log4j2 on the group.
Running in maven
mvn package vertx:runMod -Dorg.vertx.logger-delegate-factory-class-name=org.vertx.java.core.logging.impl.Log4jLogDelegateFactory -Dlog4j.ignoreTCL=true
should work around an problem in maven causes an error
log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable. log4j:ERROR The class "org.apache.log4j.Appender" was loaded by log4j:ERROR [ClassRealm[plugin>io.vertx:vertx-maven-plugin:2.0.5-final, parent: sun.misc.Launcher$AppClassLoader@21346812]] whereas object of type log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [org.vertx.maven.plugin.mojo.BaseVertxMojo$LoadFirstClassLoader@6a18817]. log4j:ERROR Could not instantiate appender named "stdout".
(this hint is from a stackoverflow article http://stackoverflow.com/questions/12404934/configure-org-apache-log4j-consoleappender-with-custom-classloader )