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

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

ALF. 03.06.2013 09:13

Логирование в 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-е.

VISTALL 03.06.2013 09:42

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);

ALF. 03.06.2013 09:52

Re: Логирование в L2J
 
Цитата:

Сообщение от VISTALL (Сообщение 303143)
в 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() на каждую запись лога это же п*здец((

Asmodiel 03.06.2013 10:28

Re: Логирование в L2J
 
Главное, чтоб работало.

ALF. 03.06.2013 12:23

Re: Логирование в L2J
 
Цитата:

Сообщение от Asmodiel (Сообщение 303146)
Главное, чтоб работало.

Windows Vista тоже работает.
Если Вы конечно понимаете, о чем я.

:dx::cl::da::dk:

VISTALL 03.06.2013 12:46

Re: Логирование в L2J
 
Цитата:

Сообщение от ALF. (Сообщение 303155)
Windows Vista тоже работает.
Если Вы конечно понимаете, о чем я.

:dx::cl::da::dk:

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

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

Другие юзеры - юзают IntelliJ IDEA, она не сильно отошла от Клипсы

bloodshed 03.06.2013 12:50

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" и т д.
так же будет создавать новые объекты.

Проще переделать на другой логгер, чем тут непонятные костыли ставить.

ALF. 03.06.2013 12:56

Re: Логирование в L2J
 
ой сори, не то увидел. Всё ок.
п.с. затераю свой преыдущий текст :) Кто успел прочитать - тот поймет с чем я затупил)

VISTALL 03.06.2013 13:03

Re: Логирование в L2J
 
Цитата:

Сообщение от ALF. (Сообщение 303166)
if(obj instanceof Date)
			return format((Date) obj, toAppendTo, fieldPosition);
Code: Java
А приведение типа это же не создание объекта.

он писал ко мне

ALF. 03.06.2013 13:03

Re: Логирование в L2J
 
Цитата:

Сообщение от VISTALL (Сообщение 303169)
он писал ко мне

Я уже понял)))
Сори)


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

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