Java с log4j - PullRequest
       5

Java с log4j

1 голос
/ 14 марта 2012

У меня есть код, который выдает исключение, и я могу напечатать трассировку стека на консоли, а также в файле журнала, но я хочу, чтобы он печатался только в файле журнала, а не на консоли.

 try
    {
       ///some code here

    }
    catch(Exception e)
    {
        logger.error("Error", e.fillInStackTrace());
  }

try block выдает какое-то исключение, и я регистрирую его в файле журнала. Я использую log4J.jar fie

Я попытался напечатать только объект Exception, но он не печатаетвся трассировка стека поможет мне в этом.

Ответы [ 3 ]

4 голосов
/ 14 марта 2012

Вам просто нужно передать исключение при вызове журнала - как в:

try {
///some code here

} catch(Exception e) {
    logger.error("Error", e);
} //                      ^
0 голосов
/ 14 марта 2012

Мудрость заключается в том, что все, что зарегистрировано на уровне информации или выше, будет напечатано на консоли.Используйте трассировку или отладку, если вы не хотите, чтобы что-то печаталось на консоли.

Например, вы можете попробовать:

try
{
   // some code here
}
catch(Exception e)
{
    logger.error(e);
    // or maybe logger.error("descriptive message: " + e);

    logger.debug("Additional info on error", e);

    // if that fails you could try:
    StringWriter strWriter = new StringWriter();
    e.printStackTrace(new PrintWriter(strWriter));
    logger.debug("Additional info on error", strWriter.toString());

    // or, I can't remember if you said fill in stack trace worked.
    // The point is that you should use debug to log the stack trace
    // as the information is to help you debug and isn't otherwise
    // useful information
    logger.debug("Additional info on error", e.fillInStackTrace());
}

Я добавил исправление, поэтому трассировка стека должна бытьраспечатаны.Это немного громоздко, но так как исключения предназначены для того, чтобы быть редкими, это не должно добавить заметных накладных расходов к вашей программе.

0 голосов
/ 14 марта 2012

Вы можете попробовать использовать getStackTrace (), чтобы получить массив StackTraceElement и построить желаемую строку из него.

Но, если под "... он не печатает всю трассировку стека ...", вы подразумеваете строку "... n more" при просмотре трассировки стека с ", вызваннымпредложение, посмотрите на этот ответ: Печать полного стека вызовов в printStackTrace ()?

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