Ответ 1
Посмотрите slf4j-taglib.
Я выполняю миграцию регистрации приложения среднего размера из пользовательского решения в нечто более стандартное. Я решил использовать 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!");
%>
Это то, что раньше приходило на ум, но кажется несколько неправильным:
logger
в стандартном классе Java)Есть ли какой-то стандарт, или лучшая практика, или что-нибудь для входа в JSP?
Кроме того, IIRC, для Log4J был какой-то taglib. Есть ли что-то подобное для SLF4J (или, может быть, Logback)?
Посмотрите slf4j-taglib.
Вы можете попробовать (обратите внимание на "!" )
<%! org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("JSPname"); %>
Затем замените System.out на
<% log.info("Hello Logging!"); %>
Комментарий Бориса действительно следует принимать во внимание, но JSPs не должны вообще регистрироваться. Я бы использовал эту технику (или что-нибудь подобное), чтобы заменить существующие записи, которые необходимо сохранить.
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!");
%>
Чтобы использовать регистратор в файле jsp, инициализируйте объект журнала следующим образом:
<% Logger logger = LoggerFactory.getLogger(this.getClass()); %>
И тогда вы можете продолжить, используя
logger.info(); or logger.error();, etc.
Я думаю, что плохая практика запускает ведение журнала с использованием репрезентативного уровня приложения. Как правило, я ожидал бы, что только поиск в бизнес-логике - JSP, загроможденный вызовом протоколирования, наверняка нарушит принцип разделения проблем.
Как временное, но изящное решение, вы можете попробовать создать пользовательский тег lib.