Логирование в L2J - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 03.06.2013, 09:13   #1
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Логирование в L2J

Немного загрустив о L2 решил посмотреть как там использовалось логирование.
После чего был сильно опечален.


Давайте рассмотрим кусочек кода
Код:
public class FileLogFormatter extends Formatter
{
	private static final String _ = "\t";
	private final SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss,SSS");
	
	@Override
	public String format(LogRecord record)
	{
		return StringUtil.concat(dateFmt.format(new Date(record.getMillis())), _, record.getLevel().getName(), _, String.valueOf(record.getThreadID()), _, record.getLoggerName(), _, record.getMessage(), Config.EOL);
	}
}
А конкретнее эту строчку
Код:
return StringUtil.concat(dateFmt.format(new Date(record.getMillis())), _, record.getLevel().getName(), _, String.valueOf(record.getThreadID()), _, record.getLoggerName(), _, record.getMessage(), Config.EOL);
А еще конкретнее эту:
Код:
new Date(record.getMillis()))
Я конечно не знаю, что они там курили но это же полный пздц!!!

Рекомендую переписать немного код:
Сделать поле класса
Код:
private final Date date = new Date();
После
Код:
public String format(LogRecord record)
	{
дописать
Код:
date.setTime(record.getMillis());
строку
Код:
dateFmt.format(new Date(record.getMillis()))
заменить на
Код:
dateFmt.format(date)
Результат будет намного лучше.
п.с. сори, писал на быструю руку без IDE и по памяти. Если где то ошибка - сори.

Так же советую посмотреть исходники http://docs.oracle.com/javase/7/docs...Formatter.html этого класса для лучшего понимания как устроено логирование в Logger-е.
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Непрочитано 03.06.2013, 09:42   #2
Аватар для VISTALL
Illussion is real

По умолчанию Re: Логирование в L2J

в SimpleDateFormat - метод format(Object), принимается аргумент, двох типов, Date + Long.

В итоге все заменится на

Код:
return StringUtil.concat(dateFmt.format(record.getMillis()), _, record.getLevel().getName(), _, String.valueOf(record.getThreadID()), _, record.getLoggerName(), _, record.getMessage(), Config.EOL);
__________________
consulo.io - Consulo - multi-language IDE
VISTALL вне форума Ответить с цитированием
Непрочитано 03.06.2013, 09:52   #3
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Re: Логирование в L2J

Цитата:
Сообщение от VISTALL Посмотреть сообщение
в SimpleDateFormat - метод format(Object), принимается аргумент, двох типов, Date + Long.

В итоге все заменится на

Код:
return StringUtil.concat(dateFmt.format(record.getMillis()), _, record.getLevel().getName(), _, String.valueOf(record.getThreadID()), _, record.getLoggerName(), _, record.getMessage(), Config.EOL);
норм.
Еще можно было типа через
Код:
String.format("%1$tH:%1$tM:%1$tS %2s %3s %4s %5s%n" и т д.
Но блин, ну создавать new Date() на каждую запись лога это же п*здец((
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Непрочитано 03.06.2013, 10:28   #4
Аватар для Asmodiel
Последний из независимых

По умолчанию Re: Логирование в L2J

Главное, чтоб работало.
__________________
Asmodiel вне форума Ответить с цитированием
Непрочитано 03.06.2013, 12:23   #5
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Re: Логирование в L2J

Цитата:
Сообщение от Asmodiel Посмотреть сообщение
Главное, чтоб работало.
Windows Vista тоже работает.
Если Вы конечно понимаете, о чем я.

ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Непрочитано 03.06.2013, 12:46   #6
Аватар для VISTALL
Illussion is real

По умолчанию Re: Логирование в L2J

Цитата:
Сообщение от ALF. Посмотреть сообщение
Windows Vista тоже работает.
Если Вы конечно понимаете, о чем я.

смирись. Есть люди которые её юзают, после СП1 она стала по лучше.

Как и большинство юзеров - юзают Клипсу, а она такое *овно

Другие юзеры - юзают IntelliJ IDEA, она не сильно отошла от Клипсы
__________________
consulo.io - Consulo - multi-language IDE
VISTALL вне форума Ответить с цитированием
Непрочитано 03.06.2013, 12:50   #7
Аватар для bloodshed
Герой

По умолчанию Re: Логирование в L2J

dateFmt.format(record.getMillis())
Code: Java
внутри смотрите, так же будет создаваться новый Date
	public final StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition fieldPosition)
	{
		if(obj instanceof Date)
			return format((Date) obj, toAppendTo, fieldPosition);
		else if(obj instanceof Number)
			return format(new Date(((Number) obj).longValue()), toAppendTo, fieldPosition);
		else
			throw new IllegalArgumentException("Cannot format given Object as a Date");
	}
Code: Java
Код:
String.format("%1$tH:%1$tM:%1$tS %2s %3s %4s %5s%n" и т д.
так же будет создавать новые объекты.

Проще переделать на другой логгер, чем тут непонятные костыли ставить.
__________________
bloodshed вне форума Отправить сообщение для bloodshed с помощью ICQ Отправить сообщение для bloodshed с помощью Skype™ Ответить с цитированием
Непрочитано 03.06.2013, 12:56   #8
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Re: Логирование в L2J

ой сори, не то увидел. Всё ок.
п.с. затераю свой преыдущий текст Кто успел прочитать - тот поймет с чем я затупил)
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Непрочитано 03.06.2013, 13:03   #9
Аватар для VISTALL
Illussion is real

По умолчанию Re: Логирование в L2J

Цитата:
Сообщение от ALF. Посмотреть сообщение
if(obj instanceof Date)
			return format((Date) obj, toAppendTo, fieldPosition);
Code: Java
А приведение типа это же не создание объекта.
он писал ко мне
__________________
consulo.io - Consulo - multi-language IDE
VISTALL вне форума Ответить с цитированием
Непрочитано 03.06.2013, 13:03   #10
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Re: Логирование в L2J

Цитата:
Сообщение от VISTALL Посмотреть сообщение
он писал ко мне
Я уже понял)))
Сори)
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск сервера DotA 2 Twinker Другие игры / Other games 6 04.09.2022 21:11
[Продам] Lineage2 Interlude от команды RusTeam TARAN Рынок / Marketplace 2 29.05.2010 17:17


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 07:14. Часовой пояс GMT +3.

Вверх