powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Log в классы
23 сообщений из 23, страница 1 из 1
Log в классы
    #38128479
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Есть классы, дейтельность которых нужно логировать.

Есть идея сделать единый класс

Код: java
1.
2.
3.
4.
5.
class LogObject {
   public Logger getLogger() {
      return LoggerFactory.getLogger(getClass());
   }
}



и потом наследоваться от этого класса:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@Service
class ProductService extends LogObject {
   public void f(...) {
       ...
       getLogger().debug("...");
       ...
   }
}



но вот здесь сразу видно, что теперь классы нельзя наследовать...
Как бы это сделать по-лучше? Чтоб и наследование не запрещать....
...
Рейтинг: 0 / 0
Log в классы
    #38128482
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего вы этим добиваетесь?
...
Рейтинг: 0 / 0
Log в классы
    #38128535
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AOP
...
Рейтинг: 0 / 0
Log в классы
    #38128559
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никAOP
Что с ним? Можно логировать выполнение методов. Но инджектить логгер во все классы через АОП не получится.
...
Рейтинг: 0 / 0
Log в классы
    #38128572
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

ну а как надо?
...
Рейтинг: 0 / 0
Log в классы
    #38128583
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksBlazkowicz,
ну а как надо?
Есть два варианта. Если не хотим лишних полей.
Код: java
1.
LoggerFactory.getLogger(getClass()).debug("Log text");


Если не хотим лишних вызовов.
Код: java
1.
2.
final static Logger log = LoggerFactory.getLogger(MyClass.class);
log.debug(...);
...
Рейтинг: 0 / 0
Log в классы
    #38128652
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Реально в больших приложениях в каждом классе есть такое статическое поле?
...
Рейтинг: 0 / 0
Log в классы
    #38128668
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks,
да
...
Рейтинг: 0 / 0
Log в классы
    #38128671
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksРеально в больших приложениях в каждом классе есть такое статическое поле?
Нет, не в каждом. Есть огромные пласты классов, которым логирование нафиг не впаялось.
Открой исходники Spring, Hibernate, Tomcat, JBoss и полистай. Где-то, например, логгер делается один раз в родительском классе, когда логика это позволяет.
Но делать для этого свой родительский класс для всего вообще смысла нет. Такой подход, например, не позволит отнаследоваться от классов фреймверка.
...
Рейтинг: 0 / 0
Log в классы
    #38128672
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНда
там где необходимо логирование
...
Рейтинг: 0 / 0
Log в классы
    #38129062
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksBlazkowicz,
Реально в больших приложениях в каждом классе есть такое статическое поле?
строка LoggerFactory.getLogger(getClass()) не несет какой-то особой функциональности, заслуживающей отдельного класса - при условии, что ты не привязываешься к конкретному логгеру, а используешь абстрактный слой типа slf4j. особенно с тех пор как slf4 varargs поддерживает.
...
Рейтинг: 0 / 0
Log в классы
    #38129166
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

Просто хотелось бы что-то типа такого:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@LoggableObject
class BusinessLogicClass {
   ...
   public void f(...) {
      logger /* или может быть getLogger() */ .debug(...);
   }
   ...
}



но я так понял сие невозможно, да?
...
Рейтинг: 0 / 0
Log в классы
    #38129172
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksно я так понял сие невозможно, да?
Возможно, но трудозатраты не соизмеримы с результатом.
...
Рейтинг: 0 / 0
Log в классы
    #38129201
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

хм...

ну вообще странно как-то это всё выглядит...

Весьма логично было бы иметь логер там где захочешь...
...
Рейтинг: 0 / 0
Log в классы
    #38129213
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks,
Код: java
1.
class ProductService extends LogObject {


логирование - это всегда сбоку-припёку. Это утилиты или сервисы.
Ты хочешь Лог сделать базовым классом что ли?
...
Рейтинг: 0 / 0
Log в классы
    #38129223
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksну вообще странно как-то это всё выглядит...
Весьма логично было бы иметь логер там где захочешь...
Вот так вот:
13843658
можно иметь логер там где захочешь.
...
Рейтинг: 0 / 0
Log в классы
    #38129267
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Log в классы
    #38129316
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл никAOP
Что с ним? Можно логировать выполнение методов. Но инджектить логгер во все классы через АОП не получится.

А зачем? Пишем свою аннотацию и пользуемся ей :
аннотация класса
аннотация метода
вплоть до аннотации строки кода(а можно и без, и все строки вида e.printStackTrace() - будут выкидываться в логгер ;)
...
Рейтинг: 0 / 0
Log в классы
    #38129438
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksВесьма логично было бы иметь логер там где захочешь...Логирование пишется не там, "где захочешь", а там, "где нужно".
Основных целей две:
1. Протоколировать работу системы так, чтобы админ мог разобраться где (не) он накосячил;
2. Протоколировать работу системы так, чтобы лог позволил разобраться с проблемой постфактум. Без отладчика.
...
Рейтинг: 0 / 0
Log в классы
    #38129540
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинА зачем? Пишем свою аннотацию и пользуемся ей :
аннотация класса
аннотация метода
вплоть до аннотации строки кода(а можно и без, и все строки вида e.printStackTrace() - будут выкидываться в логгер ;)
Логирование исключений это не интересно. Нужно ветвление workflow логировать. Это важно.
Инжектить logger стремно. Нет контейнера, нет и логгера. Юниттесты и многое другое идёт лесом.
Интересный вариант в seam (ссылки выше) - вешать сообщения на методы. Правда нужно следить чтобы никто не делал сложного ветвления внутри одного метода. Плюс довольно геморно локальные переменные как-то логировать декларативно.

Не вижу ни одного варианта который был давал какие-то преимущества не имея при этом критических недостатков. Поэтому тривиальный классический подход всё ещё самый лучший.
...
Рейтинг: 0 / 0
Log в классы
    #38129597
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

тривиальный подход крайне уродский, вы не находите?
...
Рейтинг: 0 / 0
Log в классы
    #38129605
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksтривиальный подход крайне уродский, вы не находите?
Чем именно уродский? Не более уродский чем Java в целом, на фоне модных функциональных языков.
Он крайне гибкий и тем хорош. Т.е. реально нет такого сценария где бы с этим подходом возникла не решаемая проблема.
...
Рейтинг: 0 / 0
Log в классы
    #38129668
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

тем что это как-то очень большой повтор кода, еси в каждом классе где нужен лог делать так
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Log в классы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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