При использовании метода Logger.error можно вывести на печать только тип исключения, а подробную информацию о стеке вывести невозможно, что затрудняет и делает неудобным поиск проблемы.
В классе Logger имеется несколько различных методов обработки ошибок. В зависимости от количества и типа переданных параметров автоматически выбираются различные перегруженные методы.
Когда ошибка (Объект obj) передается только в одном параметре, аномальныйобъект будет использоваться в качестве объекта.,И, наконец, распечатайте его как строку,При использовании двух параметров ошибка(String message, Throwable t), а второй параметр — Throwable, будет распечатан полный стек исключений.
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class TestLogError {
public static final Logger LOGGER = LogManager.getLogger(TestLogError.class);
public static void main(String[] args) {
try{
// Имитация аномального нулевого указателя
//Integer nullInt = Integer.valueOf(null);
int[] array = {1,2,3,4,5};
int outBoundInt = array[5];
}catch (Exception e){
// При прямой печати будет выведен только аномальный тип.
LOGGER.error(e);
// Используйте конкатенацию строк
LOGGER.error("Используйте + № напрямую соединять выход e : " + e);
LOGGER.error("Используйте + № напрямую соединять выход e.getMessage() : " + e.getMessage());
LOGGER.error("Используйте + № напрямую соединять выход e.toString() : " + e.toString());
// Используйте запятые, чтобы разделить и вызвать метод ошибки с двумя параметрами.
LOGGER.error("Используйте , Число Сделайте второй параметр Throwable : ", e);
// Попробуйте использовать разделитель. Второй параметр — Throwable. Вы обнаружите, что разделитель не работает. Различные данные для второго параметра вызывают разные перегруженные методы.
LOGGER.error("Второй параметр — Throwable, для печати используйте разделитель {} : ", e);
// Попробуйте использовать разделитель. Второй параметр — Object. Вы обнаружите, что разделитель работает в зависимости от разных типов второго параметра.
LOGGER.error("Второй параметр — Object, для печати используйте разделитель {} ",123);
}
}
}
Вывод информации:
В соответствии с функцией перегрузки метода, когда вводится только один параметр, объект будет напечатан как объект. Если это исключение e, здесь используется непосредственно toString().
/**
* Logs a message object with the {@link Level#ERROR ERROR} level.
*
* @param message the message object to log.
*/
void error(Object message);
В соответствии с функцией перегрузки метода, когда второй параметр имеет значение Throwable, будет напечатана информация об исключении и включена информация о стеке исключений.
/**
* Logs a message at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
* <code>t</code> passed as parameter.
*
* @param message the message object to log.
* @param t the exception to log, including its stack trace.
*/
void error(String message, Throwable t);
В соответствии с функцией перегрузки метода, когда вторым параметром является Object, он будет заменен в соответствии с заполнителем и будет распечатан журнал ошибок.
/**
* Logs a message with parameters at error level.
*
* @param message the message to log; the format depends on the message factory.
* @param p0 parameter to the message.
*/
void error(String message, Object p0);