Frage

Ich bin in dem Prozess des das Protokollieren von einer mittelgroßen Anwendung aus einer benutzerdefinierten Lösung, um etwas mehr Standard zu migrieren. Ich habe über die Verwendung Logback und SLF4J entschieden, und ich habe erfolgreich den größten Teil der Java-Code migriert. Allerdings habe ich ziemlich viel von JSPs, die einfach System.out für die Protokollierung verwenden. Ich habe noch nie gearbeitet viel mit JSPs und begann sich zu fragen: wie kann ich die richtige Protokollierung in einer JSP

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

Dies ist, was zuerst Sinn kam, aber es scheint falsch in mehreren Punkten:

  • Art und Weise zu ausführlich, und eine Menge Arbeit braucht, um die bestehenden JSPs
  • zu konvertieren
  • ein Anruf wird auf LoggerFactory.getLogger () jedes Mal, wenn die Seite (im Gegensatz zu einem statischen logger Feld in einer Standard-Java-Klasse) gemacht wird,
  • Ich denke, der Name des Loggers auch etwas nicht wirklich einfach so
  • sein wird

Gibt es irgendeine Art von Standard oder eine bewährte Methode, oder irgendetwas für die Protokollierung in JSPs?

Auch IIRC, es war eine Art von taglib für Log4J. Gibt es etwas ähnliches für SLF4J (oder vielleicht Logback)?

War es hilfreich?

Lösung

Hier finden Sie aktuelle slf4j-taglib .

Andere Tipps

Sie könnten versuchen, (man beachte die "!")

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

Dann ersetzen Sie System.out die mit

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

Boris Kommentar sollte allerdings wirklich in concideration genommen werden, sollte JSPs nicht Protokollierung im Allgemeinen benötigen. Ich würde nur diese Technik verwenden (oder etwas ähnlich) bestehende Protokollierung zu ersetzen, die gehalten werden mußten.

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);
    }
}

Dann ist Ihre JSP-Seite könnte wie folgt aussehen:

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

Um Logger in der JSP-Datei, initialisieren Sie das Logger-Objekt in der folgenden Art und Weise verwendet werden:

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

Und dann könnte man gehen Sie vor, indem Sie

logger.info(); or logger.error();, etc.

Ich denke, es ist eine schlechte Praxis ist von withing die gegenständliche Schicht einer Anwendung auslösen anzumelden. Im Allgemeinen würde ich in der Business-Logik zu erwarten darf nur die Anmeldung - eine JSP vollgestopft mit Logging-Aufruf würde sicherlich die Trennung von Bedenken bricht Prinzip

.

Als temporäres, dennoch elegantes Problem zu umgehen, können Sie versuchen, einen benutzerdefinierten Tag lib erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top