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

Форум администраторов игровых серверов (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 для вывода используется то лучше всетаки использовать логгер.

Хлорка 09.04.2012 17:40

Re: Java вывод stackTrace в логах
 
Хлорка старается избегать подключения каких-либо дополнительных библиотек к своим программам, особенно Apache. В силу того, что они имеют свойство включать внутрь слишком много лишнего и весить в размере соответсвенно. Встроенный java.util.logging всем устраивает, включая простоту использования. Достаточно реализовать собственный Formatter чтобы выводить трассу в филе или на экран куда там надобно. Способов вывода трассы полно в Интернете, наиболее простой StringWriter. Ради этого совсем необязательно качать Апач.

Ради примера есть такой говно-пакет в Apache называется Axis2, о котором можно вспомнить только матерным словом. Мало того что там куча всего лишнего, так и производительность всех этих 20-ти мегабайтовых библиотек при запуске простенького встроенного примера заставляет отказаться от него. А ведь Apache SOAP больше несуществует, теперь он входит внутрь Axis-а, который еще и не совместим с Microsoft SOAP. Кароч как я посмотрел время выполнения примера передачи строки, я решил для моих задач будет достаточно XML RPC. А вам ASevenfold, я рекомендую использовать мод Rampart для апача еще так мегабайт на 15 поверх Axis2 чтобы ваш комп "сдох" от бесконечных рекурсий и пустых циклов в конце которых, выйдет долгожданное слово "Hello I'm Batman!". Однозначно нельзя сказать, что тут можете обойтись одной строчкой. Ненадо забывать что за одной строчкой текста может скрываться мегабайт 20 кода, так что применять такие вещи надо по необходимости. Apache Common Logging полезен для создания промежуточных пакетов, которые предполагается использовать в разных приложениях, для конечного - ненадо.

Aquanox, давай дружить?

ANZO 09.04.2012 17:56

Re: Java вывод stackTrace в логах
 
Да хоть на овер9к библиотек нагрузите в cp - работу приложения это не замедлит.

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

Aquanox 09.04.2012 17:59

Re: Java вывод stackTrace в логах
 
<![OFFTOP[

jarjar решит ваши проблемы с упаковкой библиотек раз и навсегда =)

Знакомый показывал модификацию этого упаковщика, которая включает в конечный jar только используемые классы (анализом байткода выбирает классы + include/exclude package) - это был его шедевр, но его исходники не сохранились, а написать с нуля такую вещь у меня не хватило терпения :( (так гдето и валяется заготовка)

]]>

Хлорка 09.04.2012 18:08

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

Сообщение от Aquanox (Сообщение 176969)
<![OFFTOP[

jarjar решит ваши проблемы с упаковкой библиотек раз и навсегда =)

Знакомый показывал модификацию этого упаковщика, которая включает в конечный jar только используемые классы (анализом байткода выбирает классы + include/exclude package) - это был его шедевр, но его исходники не сохранились, а написать с нуля такую вещь у меня не хватило терпения :( (так гдето и валяется заготовка)

]]>

Не ну вообще-то до такой уж степени задроства я врят-ли дойду. Сами знаете наличие лишних классов в Яве не означает их загрузку в памяти, так что эт меня не пугает. Также не пугает и наличие большого количества библиотек. А что там пугает я уж забыл :Olen':

n3k0nation 09.04.2012 19:06

Re: Java вывод stackTrace в логах
 
2Хлорка, никто не заставляет вас программировать под энтерпрайз, если вы привыкли к ME или собиранию собственных велосипедов - ваше дело, но дайте другим, пожалуйста, все таки использовать фреймворки, которые сохраняют нервы, деньги и время.
Другими словами: если я использую OSGi-реализацию, то это не значит, что мне понадобилась оттуда одна функция.

Хлорка 09.04.2012 21:39

Re: Java вывод stackTrace в логах
 
ASevenfold. Потребность в новом лисапеде возникает когда требуется какая-то мелочь, в данном случае речь о журналировании. А для использвания готовой базы, надо время на изучение, что на английском, и опробирование. Тут индивидуально в каждом случае.

Вы оперируете каким-то непонятными мне терминами. С вас пыво.


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

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