Попытка переопределить регистратор JUL, используемый vert.x - PullRequest
0 голосов
/ 24 сентября 2018

Я бы хотел использовать 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

Есть мысли о том, что я забыл сделать?

================

РЕДАКТИРОВАТЬ: захват основных точек из потока комментариев.

  1. не может установить системные свойства в тексте, потому что регистратор JUL vert.x запускается перед основнымverticle.
  2. не может быть установлен ... в pom.xml при запуске кода с плагином vertx.Плагин mvn vertx должен вызываться после инициализации vertx.
  3. единственный способ переопределить регистратор JUL - это командная строка с использованием -D vargs.
  4. не забывайте, что vargsустанавливается перед ключом -jar, т. е. $ java -Dx = y -jar jarname.jar

1 Ответ

0 голосов
/ 15 октября 2018

Если вы используете командную строку для запуска, вы можете настроить ее на -Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.Log4j2LogDelegateFactory.Это самое простое.

Конечно, вы также можете установить его непосредственно в коде через System.setProperty, что совпадает с параметром -D, но это необходимо сделать до инициализации LoggerFactory.Очевидно, ваш код в подклассе Verticle должен выполняться после успешной инициализации Vertx.LoggerFactory уже инициализирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...