powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Новый альтернативный Slf4j логгер Бобина
25 сообщений из 320, страница 8 из 13
Новый альтернативный Slf4j логгер Бобина
    #39846507
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharpdakeiras,
А теперь рядом минимальный с логами default.

Зачем?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846508
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasLelouch,

Пофиксил перемешивание данных.

Сейчас выложу версию.

bobbinFile.getCanonicalPath().intern() - использование пула строк виртуальной машины не является хорошим решением - там и так их много (как минимум со слов Шипилева). А вы еще и вызываете попытку интернирования на каждую операцию.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846510
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

Согласен. Откачу.

Подумаю ещё как исправить.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846531
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasPetroNotC Sharpdakeiras,
А теперь рядом минимальный с логами default.

Зачем?
Для quck start должна быть некая дефолтная конфигурация чтоб любой разработчик мог
легко интегрировать твоего Бобина в свой проект. В противном случае нужен шаблон или визард
создания Бобино-подобного проекта а это сам понимаешь - чёртов гиморр.

Причем дефолтная конфигурация должна быть компактна. Например как в log4j.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>



Что касается меня - так я ленив. Я-бы и это не писал. Но не писать совсем нельзя. Иначе аппеднеры не разберуться
куда писать. В консоль или в файл.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846536
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonтак я ленив.прям как я)))
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846541
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharpmaytonтак я ленив.прям как я)))

Третьим буду:)
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846547
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondakeirasпропущено...


Зачем?
Для quck start должна быть некая дефолтная конфигурация чтоб любой разработчик мог
легко интегрировать твоего Бобина в свой проект. В противном случае нужен шаблон или визард
создания Бобино-подобного проекта а это сам понимаешь - чёртов гиморр.

Причем дефолтная конфигурация должна быть компактна. Например как в log4j.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>



Что касается меня - так я ленив. Я-бы и это не писал. Но не писать совсем нельзя. Иначе аппеднеры не разберуться
куда писать. В консоль или в файл.

Аа, сорян. Ты имеешь в виду стартовый конфиг Бобины.

Рад что такой вопрос, значит немного заинтересовало.

1) Бобина работает в минимуме вообще без конфига - пишет в консоль всё подряд.
2) Вот пример минимального конфига с файлом:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
{
  "destinations": [
    {
      "name": "io.infinite.bobbin.destinations.FileDestination",
      "properties": {
        "fileName": "\"./LOGS/THREADS/application.log\""
      }
    },
    {
      "name": "io.infinite.bobbin.destinations.ConsoleDestination"
    }
  ]
}



3) Вот пример конфига с указанием уровней, классов и разбиением на несколько файлов и указанием формата:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
{
  "levels": "['debug', 'info', 'warn', 'error', 'trace'].contains(level)",
  "classes": "className.contains('your.package.name')",
  "destinations": [
    {
      "name": "io.infinite.bobbin.destinations.FileDestination",
      "levels": "['info', 'warn', 'error', 'trace'].contains(level)",
      "classes": "className.contains('your.package.name.subpackage')",
      "properties": {
        "fileName": "\"./LOGS/${className}.log\""
      },
      "format": "\"${level}|${threadName}|${className}|${message}\\n\""
    },
    {
      "name": "io.infinite.bobbin.destinations.ConsoleDestination",
      "levels": "level=='info'"
    }
  ]
}
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846552
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данный rule избыточен по своей природе.
Код: javascript
1.
"levels": "['debug', 'info', 'warn', 'error', 'trace'].contains(level)"



На самом деле здесь достаточно одного параметра
Код: java
1.
level = ....



Все остальные - из него вытекают.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846554
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это что?
Код: java
1.
"fileName": "\"./LOGS/${className}.log\""


На каждый className будет создаваться отдельный файл?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846566
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто что?
Код: java
1.
"fileName": "\"./LOGS/${className}.log\""


На каждый className будет создаваться отдельный файл?

Я бы даже уточнил, что скрывается за className? Имя логгера (LoggerFactory.getLogger(SomeClass.class)) ? Или имя вызывающего класса?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846569
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДанный rule избыточен по своей природе.
Код: javascript
1.
"levels": "['debug', 'info', 'warn', 'error', 'trace'].contains(level)"



На самом деле здесь достаточно одного параметра
Код: java
1.
level = ....



Все остальные - из него вытекают.

Не понял мысль. Что избыточно?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846570
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто что?
Код: java
1.
"fileName": "\"./LOGS/${className}.log\""


На каждый className будет создаваться отдельный файл?

Да. Но так использовать не обязательно, это пример.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846573
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchmaytonЭто что?
Код: java
1.
"fileName": "\"./LOGS/${className}.log\""


На каждый className будет создаваться отдельный файл?

Я бы даже уточнил, что скрывается за className? Имя логгера (LoggerFactory.getLogger(SomeClass.class)) ? Или имя вызывающего класса?

В терминологии Slf4j - имя логгера.
В терминологии Бобины - имя класса:

Конструктор Бобины:
Код: java
1.
2.
3.
    Bobbin(String className) {
        this.className = className
    }
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846576
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasmaytonДанный rule избыточен по своей природе.
Код: javascript
1.
"levels": "['debug', 'info', 'warn', 'error', 'trace'].contains(level)"



На самом деле здесь достаточно одного параметра
Код: java
1.
level = ....



Все остальные - из него вытекают.

Не понял мысль. Что избыточно?
Левел - это уровень. Как уровень воды в ведре. Он - один.

У тебя не может быть одновременно пол-ведра и четверть ведра.

Если логгирование грамотно спроектировано то детализация регулируется порогом чувствительности логгера.
И не должно быть попытки логгировать WARN + TRACE при этом забить болт на промежуточные уровни.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846581
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasLelouchпропущено...


Я бы даже уточнил, что скрывается за className? Имя логгера (LoggerFactory.getLogger(SomeClass.class)) ? Или имя вызывающего класса?

В терминологии Slf4j - имя логгера.
В терминологии Бобины - имя класса:

Конструктор Бобины:
Код: java
1.
2.
3.
    Bobbin(String className) {
        this.className = className
    }


Ты-же понимаешь что в контексте одного jvm процесса могут существовать несколько одинаковых className
в разных класслоадерах. Ты-же понимаешь что для некоторых сущностей (анонимные классы) сложно
определить className.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846583
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasLelouchпропущено...


Я бы даже уточнил, что скрывается за className? Имя логгера (LoggerFactory.getLogger(SomeClass.class)) ? Или имя вызывающего класса?

В терминологии Slf4j - имя логгера.
В терминологии Бобины - имя класса:

Конструктор Бобины:
Код: java
1.
2.
3.
    Bobbin(String className) {
        this.className = className
    }



Почему не использовать общепринятую терминологию Slf4j?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846602
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchdakeirasпропущено...


В терминологии Slf4j - имя логгера.
В терминологии Бобины - имя класса:

Конструктор Бобины:
Код: java
1.
2.
3.
    Bobbin(String className) {
        this.className = className
    }



Почему не использовать общепринятую терминологию Slf4j?

Я принимаю API (интерфейс) Slf4j (хотя и он под вопросом - см. Google Flogger).
На этом я ограничился в основном.

Это же касается и уровней логирования:
авторЛевел - это уровень. Как уровень воды в ведре. Он - один.

У тебя не может быть одновременно пол-ведра и четверть ведра.

Если логгирование грамотно спроектировано то детализация регулируется порогом чувствительности логгера.
И не должно быть попытки логгировать WARN + TRACE при этом забить болт на промежуточные уровни.

Это ущербная философия log4j.
Один человек сделал (автор), теперь все повторяют за ним.

В Бобине всё иначе.

Вот документация:
https://github.com/INFINITE-TECHNOLOGY/BOBBIN/wiki/2---Key-Features#events

Events
In Object-oriented terms, existing logging frameworks consider log messages as events belonging to the same hierarchy:

- Trace
- Debug extends Trace
- Info extends Debug
- Warning extends Info
- Error extends Warning
This happens due to comparable nature of conventional Log Levels: e.g. Trace < Debug < Info < Warning < Error.

This is a traditional paradigm which is so old that people just take it is as something granted and immutable.

We change this paradigm.

Bobbin considers log messages as separate independent events with different types (as per their level).

With Bobbin it is possible to configure enabled logger levels in a granular way without filter, using array:

Код: javascript
1.
2.
3.
{
  "levels": "['info'].contains(level)"
}
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846603
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondakeirasпропущено...


В терминологии Slf4j - имя логгера.
В терминологии Бобины - имя класса:

Конструктор Бобины:
Код: java
1.
2.
3.
    Bobbin(String className) {
        this.className = className
    }


Ты-же понимаешь что в контексте одного jvm процесса могут существовать несколько одинаковых className
в разных класслоадерах. Ты-же понимаешь что для некоторых сущностей (анонимные классы) сложно
определить className.
В 99% случаев это class name. И нет смысла его по другому называть из-за 1% случаев.
Это контр-интуитивно.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846604
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет ни одной, ни малейшей причины считать что например error это подмножество debug, как это делается во всех остальных логгеров.
Это ярчайшая наркомания, от которой волосы дыбом встают в 2019 году.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846607
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

Пофиксил смешение данных, 2.0.7.

Ещё раз огромное спасибо. Сразу видно - человек мега мозг Java.
Сходу такое увидеть. Респект нереальный.
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846617
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasLelouch,

Пофиксил смешение данных, 2.0.7.

Ещё раз огромное спасибо. Сразу видно - человек мега мозг Java.
Сходу такое увидеть. Респект нереальный.

Поправочка, 2.0.8...
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846621
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeirasmaytonпропущено...

Ты-же понимаешь что в контексте одного jvm процесса могут существовать несколько одинаковых className
в разных класслоадерах. Ты-же понимаешь что для некоторых сущностей (анонимные классы) сложно
определить className.
В 99% случаев это class name. И нет смысла его по другому называть из-за 1% случаев.
Это контр-интуитивно.
Упорство - это хорошая черта. Я уважаю упорных.

Но иногда упорство переходит в твердолобость.

Как мы объясним пользователю или кастомеру clash имен классов?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846622
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras,

Мельком глянул код например здесь,
Код: java
1.
2.
3.
4.
5.
class Bobbin extends MarkerIgnoringBase {
    String className
    List<Destination> destinations = new ArrayList<>()
    BobbinScriptEngine bobbinScriptEngine
}

У тебя же код выполняется в многопоточной среде так? А классы потоко-небезопастны. За счет чего у тебя идет согласованное чтение/запись если ты не используешь никакие примитивы синхронизации (synchronized, volatile, ReentrantLock) ?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846623
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondakeirasпропущено...

В 99% случаев это class name. И нет смысла его по другому называть из-за 1% случаев.
Это контр-интуитивно.
Упорство - это хорошая черта. Я уважаю упорных.

Но иногда упорство переходит в твердолобость.

Как мы объясним пользователю или кастомеру clash имен классов?
Ок, без проблем. Пусть будет Logger Name ( in most cases Class Name). Ок?
...
Рейтинг: 0 / 0
Новый альтернативный Slf4j логгер Бобина
    #39846624
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0,

Тут вообще весь проект и всё обсуждение строится на многопоточности и как оптимизировать быстродействие синхронизации.

На текущий момент:
- Файлы в ThreadLocal, чтобы не была запись в чужой файл
- ConcurrentHashMap + ReentrantLock - чтобы в одном файле строки выводились синхронно для разных потоков

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


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