2009-10-20 37 views

答えて

7

の何が問題なのです:

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

あなたはもちろん、優れた非あいまいな接頭辞でそれを付加することができます。実際にはJSPSロガーのロギングルールを設定できるので、JSPS.source.jspという行に沿ったものが優れています。後ですべてのサブログに適用されます。

このように言えば、なぜJSPから直接ログオンする必要がありますか?

+0

JSPから直接ログを記録すると何が問題になりますか?ベストプラクティスは何でしょうか? –

+0

Tomcatでは、上記の文は 'source.jsp'の代わりに 'jsp'のみをログファイルに出力します。少なくとも 'source_jsp'またはthis.getClass()を使用する必要があります。 –

4

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

<%@ 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> 
5

あなたは、このような何かをパラメータとして、現在の要求を受け取り、JSP名に基づいてロガーを取得するファクトリメソッドを書くことができます:

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

をあなたはと遊ぶために必要がある場合があります上記のコードをテストしていませんが、それを動作させるには少しですが、それはその要点です。

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

+0

リクエストurlと.jspページの関係が緊密ではないため、特にspring mvcのようなフレームワークを使用している場合は、これは私が探しているものではありません。 – flybywire

+0

いいえ、JSPを実行している場合、要求のrequestUriプロパティは、JSPのURLによって*コンテナに到着した元のURLではなく*なります。要求はサーブレットからJSPに転送されるため、新しい要求が発生します。それは動作し、私を信頼し、私はこの技術を自分で使います。 – skaffman

1

は、例えばを適切なConversionPatternを使用します。ここでは

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

あなたはLoggerクラスのメソッドを呼び出すとき、%Cは、完全修飾クラス名を出力します。

14

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

<%@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ページの対応するサーブレットクラスを自動的に作成します。

+1

は次のようになります。<%@ page import = "org.apache.log4j.Logger"%> –

+0

これは本当にうまくいきます。私はクラス名の '_jsp'部分がクラスを見つけるために必須であることを指摘したいと思います。私はJSPがクラス名を記録するのが大好きです! – Noumenon

0

それはあなたが出力にこのコードの古い質問ものの

<%@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")); %> 
0

を使用することができますlog4netの中のjsp-EL-変数の内容を望む可能性があるので、私はいくつかのオプションを提供したいと思います。 jspファイル名= for_example.jspと言う:

1。直接ファイル名を使用しますが、アンダースコア

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

でドットを置き換える(注:APサーバは、Tomcatを言う、何を見つけたとき、常にミスが直接「for_example.jsp」を使用することで、それは、クラス名として扱わないとされますcatalina.outでこのようなクラスパス、それは意志の出力ログメッセージ "...(JSP)...."。

2.リクエストURI

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

誰かがこれを好きな私。なぜか分からないが、私はこれを見た前に誰かのコードで。

3.クラス名

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

これは通常test_servlet「と言う、for_example.jspが他のサーブレットに含まれている場合を除き、「for_example_jsp 『を取得するファイルのログ名を含め』、それは次のようになります」 '+ '注文番号'、例えば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を使用していますが、最も信頼できると思います。

関連する問題