Можно ли регистрировать имя класса источника и имя метода в продукте Java? - PullRequest
3 голосов
/ 02 сентября 2011

В настоящее время я работаю над Java-приложением для какого-либо инструмента мониторинга сети. В моем коде я должен использовать много журналов. Так как это программное обеспечение для управления сетью, информация в журналах весьма полезна для пользователя, поэтому ее использование обязательно. Но теперь я немного запутался с тем, какой метод логгера я бы предпочел. Прямо сейчас я использую Logger.lop(...//...), так как с его помощью мы также регистрируем имя класса и метод, поэтому мне (разработчикам) становится очень легко отлаживать код и находить ошибку. Но, наконец, я запутался, должен ли я доставить его конечному пользователю с тем же механизмом ведения журнала ??? Полезно ли сообщать пользователю, какой класс выполняется в данный момент, в каком методе произошла ошибка. Я много раз видел, как во многих продуктах используется обработка стека, поэтому обычно мы получаем и имя класса. Так что нет никаких проблем, чтобы сообщить конечному пользователю, какое у вас имя и метод класса ??

Ответы [ 3 ]

7 голосов
/ 02 сентября 2011

log4j / logback / slf4j позволяют использовать разные форматы для разных приложений.Для разработки вы можете включить консольного приложения, в котором вы включаете имя класса в формате, а для конечных пользователей вы можете опустить его (для файлового приложения)

6 голосов
/ 02 сентября 2011

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

Если вы жестко запрограммировали имя метода в сообщении журнала (либо сделав его частью сообщения, либо с помощьюкатегория), это другая история.Как специалист по безопасности, я не считаю, что это имеет большое значение - если ваш код на Java, его можно изменить в любом случае, поэтому ваш код должен работать таким образом, чтобы он был безопасным, даже если кодбыл отдан.

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

1 голос
/ 02 сентября 2011

Стоит отметить, что такое ведение журнала дорого обходится в Java, в отличие от C ++, где оно обычно реализуется с помощью препроцессора. К счастью, с помощью log4j / logback вы можете включать и выключать его & mdash; следуй совету Божо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...