Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Log в классы / 23 сообщений из 23, страница 1 из 1
29.01.2013, 11:39:09
    #38128479
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Log в классы
Добрый день!

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

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

Код: 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
29.01.2013, 11:41:24
    #38128482
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Log в классы
Чего вы этим добиваетесь?
...
Рейтинг: 0 / 0
29.01.2013, 12:13:18
    #38128535
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Log в классы
AOP
...
Рейтинг: 0 / 0
29.01.2013, 12:23:53
    #38128559
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Log в классы
забыл никAOP
Что с ним? Можно логировать выполнение методов. Но инджектить логгер во все классы через АОП не получится.
...
Рейтинг: 0 / 0
29.01.2013, 12:31:04
    #38128572
scymaks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Log в классы
Blazkowicz,

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


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

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

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

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



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

хм...

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

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


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

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

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

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

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


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