我想使用 Log4j2 并正在使用系统属性设置我的 MainVerticle 来做到这一点,
public class MainVerticle extends AbstractVerticle
{
static {
System.setProperty( "vertx.logger-delegate-factory-class-name",
"io.vertx.core.logging.Log4j2LogDelegateFactory" );
System.setProperty( "log4j2.debug", "true" );
}
....
}
然后我从这个verticle部署我的HttpVerticle,在HTTP verticle中,我尝试使用参数化语句,但这些语句不起作用。所以我添加了几个日志语句来显示正在使用的记录器委托,以及系统属性:
public class HttpServerVerticle extends AbstractVerticle
{
private static final Logger LOGGER = LoggerFactory.getLogger( HttpServerVerticle.class );
@Override
public void start() throws Exception
{
LOGGER.info( System.getProperty( "vertx.logger-delegate-factory-class-name" ) );
LOGGER.info( LOGGER.getDelegate().getClass().getName() );
....
在传入消息的处理程序下面,我正在使用它:
LOGGER.info( "Chat message received: {}" + message.body(), message.body() );
请注意,我使用连接添加 message.body() 以证明消息不是空字符串。
这些日志语句的输出是:
[INFO] Sep 24, 2018 2:46:09 AM ca.LinkEdTutoring.chat.http.HttpServerVerticle
[INFO] INFO: io.vertx.core.logging.Log4j2LogDelegateFactory
[INFO] Sep 24, 2018 2:46:09 AM ca.LinkEdTutoring.chat.http.HttpServerVerticle
[INFO] INFO: io.vertx.core.logging.JULLogDelegate
对于字母“b”的传入消息:
[INFO] INFO: Chat message received: {}b
我尝试在 pom.xml 文件和命令行中使用 -D 参数设置系统属性。
这是 vert.x 3.5.3
关于我忘记做什么的任何想法?
=================
编辑:从评论线程中捕获要点。
- 无法在 verticle 中设置系统属性,因为 vert.x JUL 记录器在主 verticle 之前启动。
- 使用 vertx 插件运行代码时,无法在 pom.xml 中设置 ...。mvn vertx 插件必须在 vertx 初始化后被调用。
- 似乎可以覆盖 JUL 记录器的唯一方法是命令行,使用 -D vargs。
- 不要忘记在 -jar 开关之前设置 vargs,即 $ java -Dx=y -jar jarname.jar