我想使用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" );
}
....
}
然后,我从该版本中部署我的HttpVerticle,并且在HTTP垂直版本中,我试图使用不起作用的参数化语句。因此,我添加了一些日志记录语句以显示正在使用的记录器委托以及系统属性:
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版
对我忘了做什么有什么想法吗?
================
编辑:从注释线程中捕获要点。
答案 0 :(得分:2)
如果使用命令行启动,则可以使用-Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.Log4j2LogDelegateFactory
对其进行配置。这是最简单的。
当然,您也可以通过System.setProperty在代码中直接设置它,它与-D设置相同,但是必须在初始化LoggerFactory之前完成。显然,必须在Vertx初始化成功之后执行Verticle子类中的代码。 LoggerFactory已经初始化。