Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Логирование в L2J
#1
Немного загрустив о 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/api...atter.html этого класса для лучшего понимания как устроено логирование в Logger-е.
Ответ
#2
в 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
Ответ
#3
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() на каждую запись лога это же п*здец((
Ответ
#4
Главное, чтоб работало.
[Изображение: 65693cefaba40a96a8d95ffb722f5321.png]
Ответ
#5
Asmodiel Написал:Главное, чтоб работало.

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

:dx::cl::da::dk:
Ответ
#6
ALF. Написал:Windows Vista тоже работает.
Если Вы конечно понимаете, о чем я.

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

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

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

Другие юзеры - юзают IntelliJ IDEA, она не сильно отошла от Клипсы
consulo.io - Consulo - multi-language IDE
Ответ
#7
[SRC="java"]dateFmt.format(record.getMillis())[/SRC]
внутри смотрите, так же будет создаваться новый Date
[SRC="java"] 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");
}[/SRC]

Код:
String.format("%1$tH:%1$tM:%1$tS %2s %3s %4s %5s%n" и т д.
так же будет создавать новые объекты.

Проще переделать на другой логгер, чем тут непонятные костыли ставить.
[Изображение: l2nextgen.gif]
Ответ
#8
ой сори, не то увидел. Всё ок.
п.с. затераю свой преыдущий текст Smile Кто успел прочитать - тот поймет с чем я затупил)
Ответ
#9
ALF. Написал:[SRC="java"]if(obj instanceof Date)
return format((Date) obj, toAppendTo, fieldPosition);[/SRC]

А приведение типа это же не создание объекта.

он писал ко мне
consulo.io - Consulo - multi-language IDE
Ответ
#10
VISTALL Написал:он писал ко мне

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


Перейти к форуму:


Пользователи, просматривающие эту тему: 7 Гость(ей)