powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Новый альтернативный Slf4j логгер Бобина
25 сообщений из 320, страница 2 из 13
Новый альтернативный Slf4j логгер Бобина
    #39845447
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras, дорогой друг. Я тебе настойчиво советую провести сравнительное тестирование
твоей бобины с любой другой имплементацией. Если та (другая имплементация) будет
медленной - приводи пример конфигов. Есть масса стероидов как ее разогнать.
Я убежден в этом.

P.S. Груви никогда не был быстрым с точки зрения runtime.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845451
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ок сделаю, в течении 1 недели.

Насчёт Груви - это устаревшее на 10 лет инфа. С динамической компиляцией он медленней обычное Джавы, но достаточно быстр.
Со статической компиляцией - он одинаковый по скорости с Джавой (Груви код в равнозначный Джава код переводится).
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845484
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasЯ убрал архивирование, т.к. концептуально это не задача логгера.
- не вдаваясь в детали, лично за себя скажу, что мне нравится та функциональность которая есть в Log4J - например, когда захотелось отправить логи через JMS в сборщик логов, не пришлось ничего менять в коде приложения
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845488
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasmayton,

ок сделаю, в течении 1 недели.

Насчёт Груви - это устаревшее на 10 лет инфа. С динамической компиляцией он медленней обычное Джавы, но достаточно быстр.
Со статической компиляцией - он одинаковый по скорости с Джавой (Груви код в равнозначный Джава код переводится).
Я попробую поднять свой бенчмарк Groovy в разрезе численных расчетов. Кажется у нас были
какие-то суровые проблемы с этим. В основном касалось не компилляции а динамической типизации.

Как они порешались сегодня - я не знаю. Но по состоянию на года 3 назад они все еще были.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845494
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondakeirasmayton,

ок сделаю, в течении 1 недели.

Насчёт Груви - это устаревшее на 10 лет инфа. С динамической компиляцией он медленней обычное Джавы, но достаточно быстр.
Со статической компиляцией - он одинаковый по скорости с Джавой (Груви код в равнозначный Джава код переводится).
Я попробую поднять свой бенчмарк Groovy в разрезе численных расчетов. Кажется у нас были
какие-то суровые проблемы с этим. В основном касалось не компилляции а динамической типизации.

Как они порешались сегодня - я не знаю. Но по состоянию на года 3 назад они все еще были.

Так говорю же, у меня используется Статическая Компиляция (аннотаций нет т.к. используется глобальный плагин Gradle для статической компиляции - "Groovy Enterprise Plugin") - все типы статические.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845496
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovdakeirasЯ убрал архивирование, т.к. концептуально это не задача логгера.
- не вдаваясь в детали, лично за себя скажу, что мне нравится та функциональность которая есть в Log4J - например, когда захотелось отправить логи через JMS в сборщик логов, не пришлось ничего менять в коде приложения
Я-же говорю. Встроить в JDK просто одну удачную библиотечку наподобие этой - и конец всем
терзаниям и велосипедам.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845498
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasmaytonпропущено...

Я попробую поднять свой бенчмарк Groovy в разрезе численных расчетов. Кажется у нас были
какие-то суровые проблемы с этим. В основном касалось не компилляции а динамической типизации.

Как они порешались сегодня - я не знаю. Но по состоянию на года 3 назад они все еще были.

Так говорю же, у меня используется Статическая Компиляция (аннотаций нет т.к. используется глобальный плагин Gradle для статической компиляции - "Groovy Enterprise Plugin") - все типы статические.
Я говорю не о компилляции. А о типизации. Я надеюсь ты понимаешь разницу?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845501
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моё предложение в силе.

Андрей нашёл 1 явный баг (minor) и 1 потенциальный баг с max open files exceeded.
Жду его детали чтобы перевести $.

За каждый найденный баг перевожу 20$, макс 5 багов (100$) - в общей сложности на всех.

Насчёт потокобезопасности - после анализа Ник не найден, я вижу потокобезопасный баг с довольно редкой частотой.
Тоже minor. Готов перевести $.

Итого пока 2 minor бага (потокобезопасность), 1 потенциальный баг с закрытием файлов (мне надо это обдумать).

Теперь прошу всех отписавшихся скачать и поюзать этот логгер.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845502
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

В Груви Статическая компиляция значит Статическую Типизацию.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845504
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Частота записи в не те файлы 1 случай на 27500 строк.
Это в синтетическом тесте. На практике это будет - 1 на миллионы.

Пренебрежимо для логгера.

Won't fix - перформанс дороже.

Но это хороший фидбек и засчитывается как баг.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845505
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras, я проверю. Но мой вопрос к перформансу - по прежнему актуален.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845509
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasЧастота записи в не те файлы 1 случай на 27500 строк.
Это в синтетическом тесте. На практике это будет - 1 на миллионы.

Пренебрежимо для логгера.

Won't fix - перформанс дороже.

Но это хороший фидбек и засчитывается как баг.
Капец... ты классный менеджер

Won't fix...
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845512
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovdakeirasЯ убрал архивирование, т.к. концептуально это не задача логгера.
- не вдаваясь в детали, лично за себя скажу, что мне нравится та функциональность которая есть в Log4J - например, когда захотелось отправить логи через JMS в сборщик логов, не пришлось ничего менять в коде приложения

с Logstash сейчас и так не приходится менять код. Зато работает быстрее чем JMS.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845516
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondakeirasЧастота записи в не те файлы 1 случай на 27500 строк.
Это в синтетическом тесте. На практике это будет - 1 на миллионы.

Пренебрежимо для логгера.

Won't fix - перформанс дороже.

Но это хороший фидбек и засчитывается как баг.
Капец... ты классный менеджер

Won't fix...

Это обсуждаемо естественно.

Чтобы сделать полностью потокобезопасно - надо добавлять либо synchronized, либо ThreadLocal, либо изобретать что-то.
Первые 2 - замедляют (ThreadLocal так же плохо влияет на GC).

Вопрос - надо ли оно, если на практике почти не проявляется? Зато работает быстрее?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845522
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В космос с тобой лететь нельзя...
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845526
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

эту проблему нужно рассматривать в комплексе, учитывая стратегии объявления логгеров.

Сейчас индустриальная стратегия - делать поле логгера статичным в классах.
Это означает повышенную конкуренцию по сравнению с полем экземпляра класса.

А значит - частое переключение лог файла.

Я уже делал разные реализации включая LogFileManager и ThreadLocal - от всего этого GC плохеет.

Я подумаю ещё...
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845528
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не забудь в README.md описать чем ты там жертвуешь в пользу перформанса.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845530
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну быстрее всего логи просто не писать
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845576
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внёс изменения в соотвествии с рекомендациями уважаемых комментаторов:
- SimpleDateFormat убрал (заменил на FastDateFormat из Apache commons)
- Добавил ThreadLocal для файлов. Теперь будет потокобезопасно, и даже ещё быстрее.
- Добавил закрытие файлов

Это пока не релиз. Я несколько дней это всё погоняю на тестовых проектах.

Посмотрите коммит, есть ли ещё пожелания.

https://github.com/INFINITE-TECHNOLOGY/BOBBIN/commit/1f30913ace83cc283318bd6f77631d8f117357cd

Прошу комментаторов оставить свои детали для paypal.

Прошу всех скачать логгер и начать им пользоваться :)

Он реально очень крут, посоны...
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845700
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
off
Мне вспоминается детская сказка про Толстяка который страдал каннибализмом.



Robbin, a bobbin, the big-bellied Ben,
He ate more meat than threescore men;
He ate a cow, he ate a calf,
He ate a butcher and a half;
He ate a church, he ate a steeple,
He ate the priest and all the people.

В переводе Маршака это звучало примерно так.

Робин Бобин Барабек
Скушал 40 человек...


В данном случае bobbin следовало переводить как "катушка".

Робин - толстая-катушка
Он сожрал - более 60 людей... и так далее.

Вобщем этот slf4j логгер должен ассоциироваться с ужасным канибалом который
поедает коров, священников а так-же здания и сооружения.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845773
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Бобина это катушка, часть полётного регистратора (чёрного ящика - BlackBox - мой другой проект по автоматическому добавлению логирования в код - если интересно - расскажу о нём).

Также бобина используется для бекапов на ленту (кассета).

Ну и последнее - у меня есть проект Carburetor (AST API), Бобиной так же называют генератор в двигателях.

Так что это исключительно логичное наименование.

Вы скачали логгер?:)
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845803
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Я сейчас хочу вернуться к своему проекту CardRaytracer и посмотреть почему Groovy-версию
трассировщика луча мы оставили в ветке экспериментальных. Возможно он не работал (это один поинт)
или работал медленно (это другой). Но после того как разберусь я смогу показать коеэффициент
перформанса между Java/Groovy на вычислительных операциях и каллбеках.

Опимизации груви я конечно включу на максимум который только будет возможен.

Если у вас есть какие-то дополнения и предложения - буду рад услышать.

P.S. Нет ваш логгер я пока не скачал. Мне непонятна его идея. По крайней мере вы ее
не раскрыли. И брать просто так логгер без идеи я не хочу. Мне это не интересно.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845825
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Здесь не стоит вопрос быстродействия Груви.
Во первых используется Статическая компиляция, которая равнозначна Java коду (см. ниже), во вторых это не предмет этой темы.
Тех. стек исследован и проверен на быстродействие.

Если интересно ниже класс на Груви и его декомпилированная Java версия. Как видно это обычный Java код.
(Используется @CompileStatic глобально через плагин Gradle)

Groovy класс:
package io.infinite.bobbin.destinations

import io.infinite.bobbin.BobbinFile
import io.infinite.bobbin.Level
import io.infinite.bobbin.config.DestinationConfig
import org.slf4j.helpers.Util

class FileDestination extends Destination {

ThreadLocal<BobbinFile> bobbinFileMap = new ThreadLocal<BobbinFile>()

///////////////////CONSTRUCTOR \/\/\/\/\/\/
FileDestination(DestinationConfig destinationConfig) {
super(destinationConfig)
}
///////////////////CONSTRUCTOR /\/\/\/\/\/\

@Override
protected void store(String finalOutputMessageText, Level level, String className, String date) {
String newFileName = bobbinScriptEngine.evalFileName(level.value(), className, date)
refreshCurrentFile(newFileName)
bobbinFileMap.get().writer.write(finalOutputMessageText)
bobbinFileMap.get().writer.flush()
}

void refreshCurrentFile(String newFileName) {
if (bobbinFileMap.get() == null) {
bobbinFileMap.set(initFile(newFileName))
} else {
if (bobbinFileMap.get().fileName != newFileName) {
bobbinFileMap.get().writer.close()
bobbinFileMap.set(initFile(newFileName))
}
}
}

BobbinFile initFile(String fileName) {
BobbinFile file = new BobbinFile(fileName)
file.fileName = fileName
file.getParentFile().mkdirs()
file.writer = new FileWriter(file, true)
return file
}

static {
Util.report("Bobbin: " + Thread.currentThread().getName().padRight(16) + ": " + "application working dir: " + new BobbinFile("./").getCanonicalPath())
}

}


Он же декомпилирован (Java код):
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package io.infinite.bobbin.destinations;

import groovy.transform.Generated;
import io.infinite.bobbin.BobbinFile;
import io.infinite.bobbin.Level;
import io.infinite.bobbin.config.DestinationConfig;
import java.io.FileWriter;
import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
import org.codehaus.groovy.runtime.StringGroovyMethods;
import org.slf4j.helpers.Util;

public class FileDestination extends Destination {
private ThreadLocal<BobbinFile> bobbinFileMap;

public FileDestination(DestinationConfig destinationConfig) {
super(destinationConfig);
ThreadLocal var2 = new ThreadLocal();
this.bobbinFileMap = var2;
}

protected void store(String finalOutputMessageText, Level level, String className, String date) {
String newFileName = ((FileDestination)this).getBobbinScriptEngine().evalFileName(level.value(), className, date);
this.refreshCurrentFile(newFileName);
Object var10000 = null;
((FileWriter)((BobbinFile)this.bobbinFileMap.get()).getWriter()).write(finalOutputMessageText);
var10000 = null;
((FileWriter)((BobbinFile)this.bobbinFileMap.get()).getWriter()).flush();
var10000 = null;
}

public void refreshCurrentFile(String newFileName) {
Object var10000;
if (this.bobbinFileMap.get() == null) {
this.bobbinFileMap.set(this.initFile(newFileName));
var10000 = null;
} else if (ScriptBytecodeAdapter.compareNotEqual(((BobbinFile)this.bobbinFileMap.get()).getFileName(), newFileName)) {
((FileWriter)((BobbinFile)this.bobbinFileMap.get()).getWriter()).close();
var10000 = null;
this.bobbinFileMap.set(this.initFile(newFileName));
var10000 = null;
}

}

public BobbinFile initFile(String fileName) {
BobbinFile file = new BobbinFile(fileName);
file.setFileName(fileName);
Object var10001 = null;
((BobbinFile)file).getParentFile().mkdirs();
FileWriter var4 = new FileWriter(file, true);
file.setWriter(var4);
var10001 = null;
return file;
}

static {
Util.report(StringGroovyMethods.plus(StringGroovyMethods.plus(StringGroovyMethods.plus(StringGroovyMethods.plus("Bobbin: ", StringGroovyMethods.padRight(Thread.currentThread().getName(), 16)), ": "), "application working dir: "), ((BobbinFile)(new BobbinFile("./"))).getCanonicalPath()));
Object var10000 = null;
}

@Generated
public ThreadLocal<BobbinFile> getBobbinFileMap() {
return this.bobbinFileMap;
}

@Generated
public void setBobbinFileMap(ThreadLocal<BobbinFile> var1) {
this.bobbinFileMap = var1;
}
}


Касательно идеи - вот это отличный вопрос.

Идея очень простая - использовать нативные булевские выражения на Java/Groovy для настройки уровня логирования и классов.
Например:
Код: java
1.
"levels": "['debug', 'info', 'warn', 'error'].contains(level)"


Код: java
1.
"classes": "className.contains('conf.plugins.input')"



И тоже самое для форматирования:
Код: java
1.
"format": "level.toUpperCase() + ' [' + threadName + '] ' + dateTime + ': ' + message + '\\n'"



Круто, да? Не нужен никакой чудо-синтаксис форматирования Log4j.
Не нужна чудо-концепция иерархических логгеров.

И ещё: имя файла также настраивается:
Код: java
1.
"fileName": "\"./LOGS/THREADS/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"


Как видно, оно содержит ${threadName} - и другие переменные - вот так лёгким движением руки ОДНА настройка отвечает за создание МНОГИХ файлов.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845830
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasGroovy класс:


Я вот всё никак не мог дойти почитать код. Что-то меня останавливало.
То ли то, что автор оценивает умных людей как идиотов, даже не разоравшись.
То ли что не понимает, что документацию пишуют чтобы читать, а не чтобы высокомерно отвергать.
Но тут понял- человек, неспособный вставить исходник как код- точно не может написать ничего интересного.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39845836
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasИдея очень простая - использовать нативные булевские выражения на Java/Groovy для настройки уровня логирования и классов.

А если мне на ходу надо включить TRACE? Без остановки приложения.
...
Рейтинг: 0 / 0
25 сообщений из 320, страница 2 из 13
Форумы / Java [игнор отключен] [закрыт для гостей] / Новый альтернативный Slf4j логгер Бобина
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]