Как использовать регистраторы SLF4J в JSP - PullRequest
14 голосов
/ 11 августа 2009

Я нахожусь в процессе миграции регистрации приложения среднего размера из пользовательского решения в нечто более стандартное. Я решил использовать Logback и SLF4J и успешно перенес большую часть кода Java. Тем не менее, у меня есть довольно много JSP, которые просто используют System.out для регистрации. Я никогда не работал много с JSP, и начал задаваться вопросом: как я должен использовать надлежащую регистрацию в JSP?

<%@page import="org.slf4j.Logger"%>
<%@page import="org.slf4j.LoggerFactory"%>
<%
    Logger log = LoggerFactory.getLogger(getClass());
%>
<!-- ... -->
<%
    log.info("Hello Logging!");
%>

Это то, что пришло в голову первым, но кажется неправильным в нескольких моментах:

  • слишком многословно и требует много работы для преобразования существующих JSP
  • вызов LoggerFactory.getLogger () выполняется каждый раз при визуализации страницы (в отличие от статического поля logger в стандартном классе Java)
  • Я думаю, что имя логгера тоже будет не таким простым:

Существуют ли какие-либо стандарты, лучшие практики или что-то для входа в JSP?

Кроме того, IIRC, был какой-то taglib для Log4J. Есть ли что-то похожее для SLF4J (или, может быть, Logback)?

Ответы [ 5 ]

9 голосов
/ 12 августа 2009

Взгляните на slf4j-taglib .

5 голосов
/ 11 августа 2009

Вы можете попробовать (обратите внимание на "!")

<%! org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("JSPname"); %>

Затем замените ваш System.out на

<% log.info("Hello Logging!"); %>

Комментарий Бориса действительно следует принять к сведению, хотя JSP вообще не нужно регистрировать. Я бы использовал эту технику (или что-то похожее), чтобы заменить существующие записи, которые нужно было сохранить.

0 голосов
/ 08 августа 2013

Чтобы использовать logger в файле jsp, инициализируйте объект logger следующим образом:

<% Logger logger = LoggerFactory.getLogger(this.getClass()); %>

И тогда вы можете продолжить, используя

logger.info(); or logger.error();, etc.
0 голосов
/ 17 октября 2012

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

В качестве временного, но элегантного обходного пути, вы можете попробовать создать собственный тег lib.

0 голосов
/ 11 августа 2009
public enum MyLoggerFactory {

    INSTANCE;

    @SuppressWarnings("unchecked")
    private final Map<Class, Logger> loggers = new HashMap<Class, Logger>();

    @SuppressWarnings("unchecked")
    public Logger getLogger(Class clazz) {
        if (loggers.get(clazz) == null) {
            loggers.put(clazz, LoggerFactory.getLogger(clazz));
        }
        return loggers.get(clazz);
    }
}

Тогда ваша JSP-страница может выглядеть так:

<%
    MyLoggerFactory.INSTANCE.getLogger(getClass()).info("Hello Logging!");
%>
...