Как записать что-то из компонента java в файл журнала Mule?

#java #mule #mule-component #anypoint-studio

#java #mule #mule-component #anypoint-studio

Вопрос:

Почему я не вижу ошибок, которые происходят в компоненте java в файле журнала Mule? Более того, допустим, у меня есть system.out.print в java, как я могу увидеть вывод в файле журнала?

Комментарии:

1. Что говорится в документации? docs.mulesoft.com/mule-user-guide/v/3.7/logging-in-mule ? Вы пробовали какие-то предварительные исследования? Для вещей, идущих в system.out … Я сомневаюсь, что они отображаются в каком-либо файле журнала; если только вам не удастся ввести какой-то код, который принудительно изменяет, куда собирается System.out .

Ответ №1:

Я предполагаю, что вы пишете свой собственный Java-компонент, который реализует callable.

Чтобы записать что-то в журналы из компонента Java, вам нужно получить регистратор, такой как :

 final static Logger logger = Logger.getLogger(MyCallableClass.class);
  

см https://www.mkyong.com/logging/log4j-hello-world-example /

Затем из ваших функций вы можете создать запись в журнале, например:

 logger.error("This is an example of a log entry with Error Level.");
  

Что касается вашего другого вопроса, если вы не используете блок try catch в своем компоненте, исключения, создаваемые в вашем компоненте, должны распространяться на поток mule, однако в журналах Mule вы также увидите, что исключение было вызвано компонентом Java.

Я бы посоветовал вам приложить больше информации о том, что делает ваш компонент Java, вместе с журналами, чтобы мы могли лучше понять, что вы испытываете.

Тем не менее, я создал краткий пример (см. Ниже), чтобы помочь вам. Когда вы запускаете и нажимаете конечную точку http, вы должны увидеть сообщение, напечатанное в регистраторе как ошибка из компонента, затем генерируется пользовательское исключение, и оно перехватывается в блоке стратегии исключения catch, который соответствует нашему выражению :

Поток:

 <flow name="flow-that-calls-component-with-exception">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8089" doc:name="HTTP" />
        <component class="com.example.MyCallableClass" doc:name="Java" />

        <choice-exception-strategy>

            <catch-exception-strategy when="exception.causedBy(com.example.MyCustomException)">
                <logger level="ERROR" message="My Custom Exception was thrown" />
                <set-payload value="My Custom Exception was thrown." />
            </catch-exception-strategy>

            <catch-exception-strategy>
                <logger level="ERROR" message="Another exception was thrown" />
                <set-payload value="Another exception was thrown." />
            </catch-exception-strategy>

        </choice-exception-strategy>
    </flow>
  

Компонент Java:

 package com.example;

import org.apache.log4j.Logger;
import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;

public class MyCallableClass implements Callable {

    final static Logger logger = Logger.getLogger(MyCallableClass.class);

    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {

        logger.error("This is an example of a log entry with Error Level.");
        //Our Java component will throw an exception so that we can see that we can catch it in a flow
        throw new MyCustomException();
        // throw new Exception("This is an exception that will be thrown in a flow");
        // return eventContext.getMessage().getPayload();
    }

}
  

Пользовательское исключение:

 package com.example;

public class MyCustomException extends Exception {

    /**
     * 
     */
    private static final long serialVersionUID = -5738957517051661541L;

}
  

Ответ №2:

Если вы хотите отправить данные в стандартный ввод / вывод. Соединитель позволяет записывать данные в системные потоки JAVA и из них для отладки. Это не рекомендуется в рабочей среде.

Этот URL содержит информацию и образец.

В реальном сценарии вам потребуется настроить пакет logger для управления протоколированием. Это может быть, например, log4j2, который используется в mule