LINUX.ORG.RU

Java loggers

 ,


0

1

Логгеры в java. Вы их используете? Если да, то почему? Чем они лучше голого FileWriter?

Мне надо писать в лог на каждый чих программы, многопоточно. Я тупо пишу в файл. Это плохо? Логгер лучше?

★★★★

Последнее исправление: unt1tled (всего исправлений: 1)

либа vs велосипед, видимо логгер хорош там, где софт который кушает логи хочет их в определенных форматах, что бы не писать это по двадцать раз

umren ★★★★★
()

Логгеры в java. Вы их используете? Если да, то почему? Чем они лучше голого FileWriter?

Да потому что нужно не тупо в текстовый файл строчки писать, но еще и порядок записей выдерживать, и мета-информацию добавлять, и уровни логгирования на разных окружениях разные.

Мне надо писать в лог на каждый чих программы, многопоточно. Я тупо пишу в файл.

Фига ты упоролся.

Deleted
()

А еще не всегда логи в текстовые файлы пишут. Бывает, что шлют по сети на спец тачку для логов, чтобы дисковое i/o не мешало.

Deleted
()
Ответ на: комментарий от umren

что бы не писать это по двадцать раз

Эмм. Ну я создал один класс Logger и написал туда несколько публичных методов и один приватный, который и пишет в файл.

Имхо, проще 1 раз нужный формат определить в 1 методе, что, кстати, делается довольно просто, и не изучать 100500 костылей.

unt1tled ★★★★
() автор топика

В логерах есть готовый интерфейс для работы: info, warn, error, fatal. Плюс можно настраивать куда делать вывод лога. Включать/отключать логи по определенным пакетам/классам и уровням важности.

Реализовывать это в +100500 разы особого смыла нет. Проще подключить либу, что-нибудь типа http://www.tinylog.org/

А можно вообще ничего не подключать и сделать так:

import java.util.logging.Logger;

public interface Loggable {

    default Logger logger() {
        return Logger.getLogger(this.getClass().getName());
    }
}

Теперь просто реализуешь этот интерфейс любым классом и не надо всяких статичных импортов и АОП-ов.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от unt1tled

ок, теперь добавь сюда систему мониторинга куда потом логи отправляются, будешь писать свой парсер еще ведь?

umren ★★★★★
()

Мне надо писать в лог на каждый чих программы, многопоточно. Я тупо пишу в файл.

Небось еще и без АОПа, руками?

Midael ★★★★★
()

System.out.println() хватит всем!

CARS ★★★★
()

Я тупо пишу в файл

тупо

Debasher ★★★★★
()
Ответ на: комментарий от unt1tled

Ну если это твой pet-проект, то конечно пох, но если это проект с возможной будущей поддержкой, то из-за таких вот мелочей люди тебя будут называть нехорошими словами.

foror ★★★★★
()
Ответ на: комментарий от Midael

АОП это хуже чем то что делает ТС.

Deleted
()
Ответ на: комментарий от unt1tled

Ну как бы у тебя все потоки блокируются, пока ты в файлик свой пишешь. Это я подразумеваю, что ты пишешь со всех потоков в один файл примерно таким образом:

public static synchronized void log(String message){
   //Append message to file here
}

Deleted
()

Логгеры в java. Вы их используете?

Да.

Чем они лучше голого FileWriter?

Удобней, предоставляют больше функционала.

Мне надо писать в лог на каждый чих программы, многопоточно. Я тупо пишу в файл. Это плохо? Логгер лучше?

Скорее всего будет работать быстрей и удобней.

Legioner ★★★★★
()

Ах, да еще автоматическая ротация логов тоже полезная фича.

Deleted
()

А потом тебе понадобится в один файл писать только error, а всю инфу отправлять в сислог и может быть даже в бд... Используй готовый logback или тот же log4j через sl4j, не придумывай придуманное и используемое.

matroskin
()
Ответ на: комментарий от Deleted

А во всяких logback или log4j 2.0 как делают реализацию многопоточной записи? Там какой-нибудь буфер промежуточный или по другому?

foror ★★★★★
()
Ответ на: комментарий от foror

Они собирают сообщения из разных потоков с помощью Disruptor-а в отдельном потоке, а потом сливают на диск, при достижении какого-то порогового значения или сразу если включен immediateFlush.

https://logging.apache.org/log4j/2.x/manual/async.html

Deleted
()
Ответ на: комментарий от pawnhearts

Fixed

Пиши логи в sqlite logstash, потом удобно будет поиск/выборку по ним делать.

Deleted
()
Ответ на: комментарий от Deleted

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

foror ★★★★★
()
Ответ на: комментарий от unt1tled

Кто учит?

Ну, приходишь ты в свою первую контору, говоришь 'я джуниор', ну и тебе по идее должны дать какого-нибудь человека, который бы тебя научил ряду подходов, чтобы не делал System.out.println(); в продукшоне.

Debasher ★★★★★
()
Последнее исправление: Debasher (всего исправлений: 1)
Ответ на: комментарий от Deleted

Вообще-то LMAX это разработчики трейдинговой платформы, так что вряд ли они сами себе в ногу стреляют в своем продакшене. Да и в быстром concurrency бывает без хаков с Unsafe не обойтись. Когда еще там VarHandles выкатят c JDK 9.

Deleted
()
Ответ на: комментарий от Debasher

Я эту фазу как-то пропустил. Мне в первой дали сразу свой проект, причем на сях. Потом писал как умел и учился сам. Вот, видимо, досихпор учусь, когда приходится делать то, чего раньше не делал.

unt1tled ★★★★
() автор топика
Ответ на: комментарий от Deleted

Вообще-то LMAX это разработчики трейдинговой платформы, так что вряд ли они сами себе в ногу стреляют в своем продакшене.

У них запросто может быть концепция «упало и хрен с ним» и захардкоденная версия jvm, а у остальных - должны быть мозги прежде чем брать в руки это.

Deleted
()
Ответ на: комментарий от foror

и ничего - работает.

отличный подход, прошивку для томми не ты писал? Она тоже работала.

Deleted
()

Посмотри доклад о логгировании Владимира Красильщика на крайнем JBreak. Тыц!

TheKnight ★★★
()
Ответ на: комментарий от Deleted

должны быть мозги прежде чем брать в руки это.

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

Deleted
()
Ответ на: комментарий от Deleted

куча адового колдунства и хаков

Нет там никакого колдунства и хаков, Unsafe используется для off-heap размещения данных. Все остальное колдунство вокруг обычных CAS-ов и пула объектов.

Все уважающие себя кеши на java юзают технику off-heap, в том числе и ынтырпрайз решения.

foror ★★★★★
()
Ответ на: комментарий от foror

Нет там никакого колдунства и хаков, Unsafe используется для off-heap размещения данных.

Омг, и что мне все время попадаются упоротые?

Deleted
()

Logger можно настроить, чтобы он выводил ток определенные уровни, или слал логи куда-нибудь куда им нужно.

takino ★★★★★
()

log4j считается чуть-ли не промышленным стандартом.

DarkAmateur ★★★★
()
Ответ на: комментарий от unt1tled

Лучше бы ты написал еще один интерфейс ILogger, чтобы, если, (не дай сатана), кто-то поддерживал твое приложение, мог избавиться от этого как можно проще и быстрее.

nikolnik ★★★
()

Да, давай в 21 веке будем писать логи в консоль.
Если у тебя куча инстансов кучи сервисов деплоятся на несколько машин, пойди-ка поищи потом концы.
И, так, мы приходим к таким вещам, как ELK стек. Когда логи пишутся в сокет удаленного процесса logstash, который ротирует их куда надо, приправляя их доп. информацией, или создавая, к примеру, индексы на elasticsearch.
Но ты можешь продолджать писать в файлы, или даже в stdin/stderr, никто тебе не мешает, да.

bytecode ★★
()
Последнее исправление: bytecode (всего исправлений: 1)
Ответ на: комментарий от Deleted

так что кышь из профессии.

Это из какой, из дворников? Даже туда таких луддитов и мракобесов как ты не набирают.

unlog1c ★★★
()
Ответ на: комментарий от unlog1c

Это из какой, из дворников?

Кого только не встретишь на лоре, даже трехзвездочные дворники есть.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.