15

私は、中規模のアプリケーションのロギングを、カスタム ソリューションからより標準的なソリューションに移行しようとしています。Logback と SLF4J を使用することに決め、ほとんどの Java コードを正常に移行しました。ただし、ロギングに単に System.out を使用する JSP がかなりあります。私は 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 には、Log4J 用のある種の taglib がありました。SLF4J (または Logback) に似たものはありますか?

4

5 に答える 5

9

slf4j-taglibを見てください。

于 2009-08-12T06:41:28.263 に答える
5

あなたは試すことができます(「!」に注意してください)

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

次に、 System.out を次のように置き換えます

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

Boris のコメントは考慮に入れる必要がありますが、JSP は一般的にログを記録する必要はありません。保持する必要がある既存のログを置き換えるためにのみ、この手法 (または同様のもの) を使用します。

于 2009-08-11T08:50:39.593 に答える
0

jsp ファイルでロガーを使用するには、次の方法でロガー オブジェクトを初期化します。

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

そして、次を使用して先に進むことができます

logger.info(); or logger.error();, etc.
于 2013-08-08T07:21:55.693 に答える
0
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!");
%>
于 2009-08-11T07:59:39.560 に答える
-1

アプリケーションの表現層からロギングをトリガーするのは悪い習慣だと思います。一般に、ビジネス ロジックでのみロギングが行われることが予想されます。JSP がロギング呼び出しで雑然としていると、懸念の分離の原則が確実に破られます。

一時的でありながら洗練された回避策として、カスタム タグ ライブラリを作成してみることができます。

于 2012-10-17T14:07:29.267 に答える