web-dev-qa-db-ja.com

jspページ内でlog4jを使用する正しい方法は何ですか

つまり、別のファイルに含まれているか、クラスにコンパイルされているかどうかに関係なく、ロガー名にsource.jspファイルを反映させたいということです。

13
flybywire

どうしたの:

Logger logger = Logger.getLogger( "source.jsp" );

もちろん、より明確な接頭辞を前に付けることもできます。実際には、JSPSロガーのログルールを設定できるため、JSPS.source.jspに沿ったものの方が優れています。これは、後ですべてのサブロガーに適用されます。

そうは言っても、なぜJSPから直接ログを記録する必要があるのでしょうか。

まず、必要なパッケージをインポートします。

<%@page import="org.Apache.log4j.Logger"%>

その後、

 <%! static Logger logger = Logger.getLogger(jsppagename_jsp.class); %>

jsppagename_jsp使用しているサーバーによって、変更される場合があります。そして、次のようにjsp内の任意の場所を使用します。

<% logger.info("This is test."); %>

IDEは、ロガーオブジェクトの宣言時にエラーメッセージを表示する場合があります。ただし、Tomcatのようなサーバーは、Tomcat内の各jspページの対応するサーブレットクラスを直接自動的に作成します。

21
Pavan Dave

現在のリクエストをパラメータとして受け取り、JSP名に基づいてロガーを取得するファクトリメソッドを次のように記述できます。

public static Logger getLogger(HttpServletRequest request) {
    String requestUri = request.getRequestURI();
    String jspName = requestUri.substring(requestUri.lastIndexOf('/'));
    return Logger.getLogger(jspName);
}

それを機能させるために少し試してみる必要があるかもしれませんが(私は上記のコードをテストしていません)、それがその要点です。

これは、リクエストオブジェクトにアクセスできる限り、JSPから直接使用することも、JSPで使用されるBeanまたはタグクラスから使用することもできます。

5
skaffman

以下はコードです。すべての構成ファイルの配置と構成は、サーブレットまたは他のクラスでの使用方法と同じです。

<%@ page import="org.Apache.log4j.Logger" %>
<html>
    <head>
        <title>Demonstration log4j usage in jsp</title>
    </head>
    <body>
        <% Logger log = Logger.getLogger("com.mobilefish.demo.test");
           log.debug("Show DEBUG message");
           log.info("Show INFO message");
           log.warn("Show WARN message");
           log.error("Show ERROR message");
           log.fatal("Show FATAL message"); %>
        <b>The log messages are shown in the Tomcat console and in the ${catalina.home}/logs/demo.log file.</b>
    </body>
</html>
4
Ryan

古い質問ですが、いくつかのオプションを提供したいと思います。 jsp filename = for_example.jspと言います。

1。ファイル名を直接使用しますが、ドットをアンダースコアに置き換えます

Logger log = Logger.getLogger("for_example_jsp");

(注:常に間違いは 'for_example.jsp'を直接使用することです。これはクラス名として扱われ、APサーバー(Tomcatなど)がそのようなクラスパスを検出しない場合、catalina.outに「..」としてログメッセージを出力します。 。(jsp).... "。

2。リクエストURIを使用

Logger log = Logger.getLogger(request.getRequestURI());

誰かがこれが好きです。理由はわかりませんが、誰かのコードでこれを見たことがあります。

。クラス名を使用

Logger log = Logger.getLogger(this.getClass());

これは通常、「for_example_jsp」を取得します。ただし、for_example.jspが他のサーブレット(「test_servlet」など)に含まれている場合は、「ファイルのログ名を含む」+「順序付けられた番号」(例:test_servlet_include_005)になります。

4。プログラムでjspファイル名を取得します

String __jspName = this.getClass().getSimpleName(); // Get jsp program name
Logger log = Logger.getLogger(__jspName);
__jspName = __jspName.replaceAll("_","."); // get back true jsp file name

ただし、これは、使用しているAPサーバーとバージョンに関して必ずしも正しいとは限りません。

個人的には方法1が最も信頼できると思うので使用します。

1
Scott Chu

Log4jを構成するときは、適切な ConversionPattern を使用してください。例:

%d [%C] %-5p %c - %m%n

ここで、%Cは、Loggerクラスメソッドのいずれかを呼び出すと、完全修飾クラス名を出力します。

1
NT_

Jsp-el-variablesのコンテンツをlog4netに出力する可能性が高いため、このコードを使用できます。

<%@page import="org.Apache.log4j.Logger"%>

<%-- output of the jsp-el variables "orderID" and "orderDate" in log4j --%>
<c:set var="Parameter4Log4J" value="orderID=${orderID} orderDate=${orderDate}" />
<% Logger.getLogger("jsp.order.orderconfirmation").info(
               pageContext.getAttribute("Parameter4Log4J")); %> 
1
k3b