Как стать автором
Обновить

Комментарии 19

Дешево и сердито :)
Это бы знание, да года три назад…
задачка из учебника по АОР
ну я тоже удивился, что нигде нет именно готовой реализации. Если я-таки свилосипедил, то киньте ссылкой на проект, буду благодарен.
А говорят об этом везде, да. На уникальность идеи\реализации не претендую :)
Дело не в проекте, а в том, что такая задача традиционно решается с помощью АОП. А первая задача на АОП, которую чаще всего решают при изучении этой парадигмы — это сквозное логирование.
ну да, я поэтому и плюсанул исходный комментарий, что полностью с ним согласен. Это классическая задача АОП.

И именно поэтому я и не расписываю пути «как я решал эту сложнейшую проблему» :) Просто представил результат, потому что в готовом виде ничего подобного (кроме log4postsharp уже упоминавшегося) не нашел.
Удобно получилось.
Интересно, существует ли подобный функционал для Java через аннотации?
Сам задал вопрос, сам и ответил. :)

Смотреть нужно в сторону AspectJ (АОП).
В этом подходе вижу одну очень большу проблему тут:
Конкретизируя задачу, необходимо добавлять вызовы логгера в начало функций, а также логировать не только сам факт входа, но и параметры, с которыми функция была вызвана.

Очень часто при использовании Entity Framework, ну и вообще, бывают lazy-параметры. При вызове ToString все начинает подтягиваться с базы, и не факт что оно сработает вообще на всех этапах работы программы. Поэтому задача сводится к тому, чтобы логировать факт входа.
Вопрос немножко не в тему: А что, в EF пришли к лейзи? В той версии, которую я смотрел (вроде 1.0) все вроде было хардкорно-директово. Они еще помнится под это какую-то объяснительную базу подкладывали, доказывая преимущество над подходом NHibernate, типа лучший контроль, нет лишних обращений и.т.п.
да там изначально было, за исключением может каких древних версий. Да и свет клином не сошелся на EF, в NHibernate, других мэпперах такая же фигня.
логирование параметров происходит только при указании атрибута [Log(true)]. В случаях, когда вызов ToString является проблемой, параметры можно не логировать.

Лично я «по умолчанию» логирую-таки без параметров, а с ними — на ключевых стадиях процесса, в ключевых менеджер-классах.
«благо, и для внутренних нужд мы плавно переходим на log4net», сколько печали в этой фразе =)
а почему PostSharp не подходит?
требует линковки готового продукта со своими библиотеками, что делает нас зависимыми от него.
Проприетарность, и возможная платность в будущем.
Некоторые негативные отзывы о производительности — но это на личном примере не проверялось.

Это вкупе, ну и относительная простота собственной реализации и подтолкнули к Mono.Cecil.
что значит «возможная платность в будущем»? Он вроде как уже платный, если не Community Edition.
коммьюнити я и имел ввиду. Для данных целей её вроде бы достаточно.
Но и коммьюнити в один прекрасный момент может стать платной
старые версии платными вдруг не станут.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.