Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Java (https://forum.zone-game.info/forumdisplay.php?f=126)
-   -   Java вывод stackTrace в логах (https://forum.zone-game.info/showthread.php?t=18680)

Horus92 15.03.2012 21:40

Java вывод stackTrace в логах
 
Здравствуйте подскажите как выводить stackTrace исключения в файл.
В данный момент в Windows лог файл создаю так:
Код:

java -Xmx32m -cp mysql-connector-java-5.1.18-bin.jar; ServerSide >> stdout.log
в коде ошибка выводится так
Код:

catch (SQLException ex) {           
                            System.out.println(ex.toString());
                            ex.printStackTrace();
                        }

System.out.println(ex.toString()); попадает в stdout.log
а ex.printStackTrace(); пишется в консоль а в лог файл не попадает, подскажите пожалуйста как можно вывести стек трейс в файл.

linliss 15.03.2012 21:49

Re: Java вывод stackTrace в логах
 
ну так напишите простеньку писалку лога в файл

VISTALL 15.03.2012 22:01

Re: Java вывод stackTrace в логах
 
StringWriter st = new StringWriter();

ex.printStackTrace(st);

st.toString() - строка с трейсом

n3k0nation 15.03.2012 22:02

Re: Java вывод stackTrace в логах
 
Используйте дополнительные библиотеки от Apache-сообщества, там все делается буквально в одну-две строчки. Если же их по какой-либо причине невозможно использовать, то записать куда-либо трассировку стека, можно через принт стрим или же принт врайтер. Причем врайтер мы можем обернуть в стринг врайтер, а дальше делать уже, что хотим ;)

А вообще хорошо читать время от времени javadoc стандартной библиотеки.

ANZO 16.03.2012 13:22

Re: Java вывод stackTrace в логах
 
для log4j например:

Конфиг аппендера:

Код:

<appender name="ERROR_APPENDER" class="l2god.log.appenders.TruncateToZipFileAppender">
                <param name="file" value="log/java/errors.log"/>
                <param name="append" value="false"/>
                <param name="backupDir" value="log/backup"/>
                <!-- Windows systems doesn't support : char in file names -->
                <param name="backupDateFormat" value="yyyy-MM-dd HH-mm-ss"/>
                <layout class="org.apache.log4j.PatternLayout">
                        <param name="ConversionPattern" value="[%p %d{yyyy-MM-dd HH:mm:ss}] %c:%L - %m%n"/>
                </layout>
                <filter class="l2god.log.filters.ThrowablePresentFilter"/>
        </appender>

и собсно сам фильтр
Код:

public class ThrowableAsMessageLogger extends Logger
{

        /**
        * Creates new instance of this logger
        *
        * @param name logger's name
        */
        protected ThrowableAsMessageLogger(String name)
        {
                super(name);
        }

        /**
        * This method checks if message is instance of throwbale and throwable is null. If it is so it will move message to
        * throwable and set Locationalized message of throwable as message of the log record
        *
        * @param fqcn        fully qualified class name, it would be used to get the line of call
        * @param level  level of log record
        * @param message message of log record
        * @param t          throwable, if any present
        */
        @Override
        protected void forcedLog(String fqcn, Priority level, Object message, Throwable t)
        {

                if (message instanceof Throwable && t == null)
                {
                        t = (Throwable) message;
                        message = t.getLocalizedMessage();
                }

                super.forcedLog(fqcn, level, message, t);
        }
}


Blakkky 16.03.2012 14:20

Re: Java вывод stackTrace в логах
 
А вот так не пробывали? :)
Код:

java -Xmx32m -cp mysql-connector-java-5.1.18-bin.jar; ServerSide >> stdout.log 2>&1

Хлорка 08.04.2012 20:42

Re: Java вывод stackTrace в логах
 
Цитата:

Сообщение от ASevenfold (Сообщение 170717)
Используйте дополнительные библиотеки от Apache-сообщества, там все делается буквально в одну-две строчки.

Да чувак, ну ты и сказанул, сразу ясно с апачем ты не работал.

Aquanox 08.04.2012 21:49

Re: Java вывод stackTrace в логах
 
Цитата:

Сообщение от Хлорка (Сообщение 176645)
Да чувак, ну ты и сказанул, сразу ясно с апачем ты не работал.

по сравнению с JUL (jdk 1.4 java.util.logging) commons-logging просто шедевр.

P.S. Пользуюсь slf4j + logback / log4j :]

n3k0nation 09.04.2012 01:16

Re: Java вывод stackTrace в логах
 
Цитата:

Сообщение от Хлорка (Сообщение 176645)
Да чувак, ну ты и сказанул, сразу ясно с апачем ты не работал.

2Хлорка:
Свернуть ↑Развернуть ↓


Цитата:

Сообщение от Aquanox (Сообщение 176693)
по сравнению с JUL (jdk 1.4 java.util.logging) commons-logging просто шедевр.

P.S. Пользуюсь slf4j + logback / log4j :]

Я говорил в данном случае, про commons-lang библиотеку :)

Aquanox 09.04.2012 11:49

Re: Java вывод stackTrace в логах
 
Цитата:

Сообщение от ASevenfold (Сообщение 176825)
Я говорил в данном случае, про commons-lang библиотеку :)

Забыл за нее, редко пользуюсь.

Раз stacktrace для вывода используется то лучше всетаки использовать логгер.


Текущее время: 12:01. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot