Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 [8] 9 10 11   вперед  Ctrl      все
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
PetroNotC Sharp
dakeiras,
А теперь рядом минимальный с логами default.


Зачем?
7 авг 19, 16:54    [21943995]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1760
dakeiras
Lelouch,

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

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


bobbinFile.getCanonicalPath().intern() - использование пула строк виртуальной машины не является хорошим решением - там и так их много (как минимум со слов Шипилева). А вы еще и вызываете попытку интернирования на каждую операцию.
7 авг 19, 16:54    [21943996]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
Lelouch,

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

Подумаю ещё как исправить.
7 авг 19, 16:54    [21943998]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
dakeiras
PetroNotC Sharp
dakeiras,
А теперь рядом минимальный с логами default.


Зачем?

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

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

<?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>


Что касается меня - так я ленив. Я-бы и это не писал. Но не писать совсем нельзя. Иначе аппеднеры не разберуться
куда писать. В консоль или в файл.
7 авг 19, 17:27    [21944024]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 1019
mayton
так я ленив.
прям как я)))
7 авг 19, 17:38    [21944031]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1760
PetroNotC Sharp
mayton
так я ленив.
прям как я)))


Третьим буду:)
7 авг 19, 17:45    [21944036]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
mayton
dakeiras
пропущено...


Зачем?

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

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

<?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) Вот пример минимального конфига с файлом:
{
  "destinations": [
    {
      "name": "io.infinite.bobbin.destinations.FileDestination",
      "properties": {
        "fileName": "\"./LOGS/THREADS/application.log\""
      }
    },
    {
      "name": "io.infinite.bobbin.destinations.ConsoleDestination"
    }
  ]
}


3) Вот пример конфига с указанием уровней, классов и разбиением на несколько файлов и указанием формата:
{
  "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'"
    }
  ]
}
7 авг 19, 17:48    [21944043]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
Данный rule избыточен по своей природе.
"levels": "['debug', 'info', 'warn', 'error', 'trace'].contains(level)"


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


Все остальные - из него вытекают.
7 авг 19, 18:01    [21944048]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
Это что?
"fileName": "\"./LOGS/${className}.log\""

На каждый className будет создаваться отдельный файл?
7 авг 19, 18:04    [21944050]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1760
mayton
Это что?
"fileName": "\"./LOGS/${className}.log\""

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


Я бы даже уточнил, что скрывается за className? Имя логгера (LoggerFactory.getLogger(SomeClass.class)) ? Или имя вызывающего класса?
7 авг 19, 18:23    [21944069]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
mayton
Данный rule избыточен по своей природе.
"levels": "['debug', 'info', 'warn', 'error', 'trace'].contains(level)"


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


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


Не понял мысль. Что избыточно?
7 авг 19, 18:25    [21944073]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
mayton
Это что?
"fileName": "\"./LOGS/${className}.log\""

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


Да. Но так использовать не обязательно, это пример.
7 авг 19, 18:26    [21944074]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
Lelouch
mayton
Это что?
"fileName": "\"./LOGS/${className}.log\""

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


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


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

Конструктор Бобины:
    Bobbin(String className) {
        this.className = className
    }
7 авг 19, 18:30    [21944077]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
dakeiras
mayton
Данный rule избыточен по своей природе.
"levels": "['debug', 'info', 'warn', 'error', 'trace'].contains(level)"


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


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


Не понял мысль. Что избыточно?

Левел - это уровень. Как уровень воды в ведре. Он - один.

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

Если логгирование грамотно спроектировано то детализация регулируется порогом чувствительности логгера.
И не должно быть попытки логгировать WARN + TRACE при этом забить болт на промежуточные уровни.
7 авг 19, 18:32    [21944080]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
dakeiras
Lelouch
пропущено...


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


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

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

Ты-же понимаешь что в контексте одного jvm процесса могут существовать несколько одинаковых className
в разных класслоадерах. Ты-же понимаешь что для некоторых сущностей (анонимные классы) сложно
определить className.
7 авг 19, 18:34    [21944087]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1760
dakeiras
Lelouch
пропущено...


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


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

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


Почему не использовать общепринятую терминологию Slf4j?
7 авг 19, 18:36    [21944090]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
Lelouch
dakeiras
пропущено...


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

Конструктор Бобины:
    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:

{
  "levels": "['info'].contains(level)"
}
7 авг 19, 19:02    [21944109]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
mayton
dakeiras
пропущено...


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

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

Ты-же понимаешь что в контексте одного jvm процесса могут существовать несколько одинаковых className
в разных класслоадерах. Ты-же понимаешь что для некоторых сущностей (анонимные классы) сложно
определить className.

В 99% случаев это class name. И нет смысла его по другому называть из-за 1% случаев.
Это контр-интуитивно.
7 авг 19, 19:06    [21944110]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
Нет ни одной, ни малейшей причины считать что например error это подмножество debug, как это делается во всех остальных логгеров.
Это ярчайшая наркомания, от которой волосы дыбом встают в 2019 году.
7 авг 19, 19:10    [21944112]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
Lelouch,

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

Ещё раз огромное спасибо. Сразу видно - человек мега мозг Java.
Сходу такое увидеть. Респект нереальный.
7 авг 19, 19:17    [21944118]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
dakeiras
Lelouch,

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

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


Поправочка, 2.0.8...
7 авг 19, 19:31    [21944128]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
mayton
Member

Откуда: loopback
Сообщений: 41377
dakeiras
mayton
пропущено...

Ты-же понимаешь что в контексте одного jvm процесса могут существовать несколько одинаковых className
в разных класслоадерах. Ты-же понимаешь что для некоторых сущностей (анонимные классы) сложно
определить className.

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

Упорство - это хорошая черта. Я уважаю упорных.

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

Как мы объясним пользователю или кастомеру clash имен классов?
7 авг 19, 19:39    [21944132]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
vas0
Member

Откуда: Таможенный союз (Россия, Казахстан)
Сообщений: 1210
dakeiras,

Мельком глянул код например здесь,
class Bobbin extends MarkerIgnoringBase {
    String className
    List<Destination> destinations = new ArrayList<>()
    BobbinScriptEngine bobbinScriptEngine
}
У тебя же код выполняется в многопоточной среде так? А классы потоко-небезопастны. За счет чего у тебя идет согласованное чтение/запись если ты не используешь никакие примитивы синхронизации (synchronized, volatile, ReentrantLock) ?
7 авг 19, 19:41    [21944133]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
mayton
dakeiras
пропущено...

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

Упорство - это хорошая черта. Я уважаю упорных.

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

Как мы объясним пользователю или кастомеру clash имен классов?

Ок, без проблем. Пусть будет Logger Name ( in most cases Class Name). Ок?
7 авг 19, 19:46    [21944134]     Ответить | Цитировать Сообщить модератору
 Re: Новый альтернативный Slf4j логгер Бобина  [new]
dakeiras
Member

Откуда:
Сообщений: 294
vas0,

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

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

Всё остальное потокобезопасно и не требует синхронизации.
7 авг 19, 19:49    [21944135]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 [8] 9 10 11   вперед  Ctrl      все
Все форумы / Java Ответить