quelle est la bonne façon de l'utiliser log4j dans les pages jsp

je veux dire, je veux que le nom de l'enregistreur reflète la source.fichier jsp, peu importe s'il est inclus dans un autre fichier ou compilé dans une classe ou autre.

12
demandé sur flybywire 2009-10-20 18:17:59

7 réponses

What is wrong with:

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

vous pouvez le préparer avec un préfixe non-ambigu, bien sûr. En fait, quelque chose dans le genre JSPS.source.jsp est mieux, comme vous pouvez configurer la journalisation des règles pour JSPS logger, qui serait appliqué plus tard à tous les sous-loggers.

cela dit, Pourquoi devez-vous vous connecter directement depuis JSP?

7
répondu Alexander Pogrebnyak 2009-10-22 01:37:40

tout D'abord, importez le paquet requis c.-à-d.

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

ensuite,

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

jsppagename_jsp peut changer, selon le serveur que vous utilisez. Et puis, utilisez n'importe où dans jsp comme:

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

L'IDE peut afficher un message d'erreur à la déclaration de l'objet logger. Mais, ne vous inquiétez pas, le serveur comme tomcat va automatiquement créer la classe servlet correspondante de chaque page jsp à l'intérieur de tomcat directement lui-même.

15
répondu Pavan Dave 2017-04-07 09:25:49

Vous pouvez écrire une méthode d'usine qui prend la requête courante comme paramètre, et qui obtient un Logger basé sur le nom JSP, quelque chose comme ceci:

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

Vous pourriez avoir à jouer avec elle un peu pour le faire fonctionner (je n'ai pas testé le code ci-dessus), mais c'est l'essentiel.

ceci peut être utilisé directement à partir du JSP, ou d'une classe de fève ou de balise qui est utilisée par le JSP, tant qu'il a accès à l'objet request.

5
répondu skaffman 2009-10-20 14:24:06

voici Le code. Tout le placement de fichier de configuration et la configuration sont les mêmes que la façon dont il est utilisé dans Servlet ou autre classe.

<%@ 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
répondu Ryan 2014-01-27 09:54:25

Utilisez le ConversionPattern lors de la configuration de log4j, E. g:

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

ici, le %C affiche le nom complet de la classe lorsque vous appelez l'une des méthodes de la classe Logger.

1
répondu NT_ 2009-10-23 08:46:55

comme il est probable que vous voulez afficher le contenu des variables jsp-el-dans log4net, vous pouvez utiliser ce code

<%@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
répondu k3b 2015-03-18 16:10:14

bien qu'il s'agisse d'une vieille question, j'aimerais vous proposer quelques options. Disons que JSP filename = for_example.jsp:

1. Utilisez le nom du fichier directement mais remplacez le point par un caractère de soulignement

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

(note: l'erreur constante est d'utiliser ' for_example.JSP' directement, il sera traité comme nom de classe et quand AP server, par exemple Tomcat, ne trouvera pas de chemin de classe, il affichera le message log dans catalina."...(JSP. )...".

2. Demande d'utilisation URI

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

Quelqu'un aime cette. Je ne sais pas pourquoi, mais j'ai déjà vu ça dans les codes de quelqu'un.

3. Utiliser un nom de Classe

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

ce sera généralement 'for_example_jsp' sauf quand for_example.jsp est inclus dans un autre servlet, par exemple "test_servlet", il s'agit de "y compris le nom de log du fichier" + "un nombre commandé", par exemple test_servlet_include_005.

4. Par programmation d'obtenir fichier jsp nom

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

cependant, ce n'est pas nécessairement juste en ce qui concerne le serveur AP et la version que vous utilisez.

j'utilise personnellement la méthode 1 car je pense qu'elle est la plus fiable.

0
répondu Scott Chu 2017-10-26 07:31:27