Quiero decir, quiero que el nombre del registrador refleje el archivo source.jsp, sin importar si está incluido en otro archivo o compilado a una clase o lo que sea.cuál es la forma correcta de usar log4j dentro de las páginas jsp
Respuesta
¿Qué hay de malo en:
Logger logger = Logger.getLogger("source.jsp");
puede anteponer con una mejor prefijo no ambigua, por supuesto. En realidad, es mejor algo a lo largo de las líneas JSPS.source.jsp
, ya que puede configurar reglas de registro para el registrador JSPS
, que luego se aplicarán a todos los subloggers.
Habiendo dicho esto, ¿por qué necesita iniciar sesión directamente desde JSP?
El siguiente es el código. Toda la ubicación y la configuración del archivo de configuración son las mismas que se usan en Servlet u otra clase.
<%@ 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>
Se puede escribir un método de fábrica que tiene la petición actual como un parámetro, y el que obtiene un registrador basado en el nombre de JSP, algo como esto:
public static Logger getLogger(HttpServletRequest request) {
String requestUri = request.getRequestURI();
String jspName = requestUri.substring(requestUri.lastIndexOf('/'));
return Logger.getLogger(jspName);
}
Puede que tenga que jugar con es un poco para que funcione (no he probado el código anterior), pero esa es la esencia de esto.
Esto podría usarse directamente desde el JSP, o desde una clase de bean o tag que utiliza el JSP, siempre que tenga acceso al objeto de solicitud.
esto no es lo que estoy buscando, ya que la relación entre la URL de solicitud y la página .jsp es menos estricta, especialmente si utiliza frameworks como spring mvc, pero no solo. – flybywire
No, si está ejecutando un JSP, la propiedad requestUri de la solicitud * será * por el URL del JSP, * no * el URL original que llegó al contenedor. Recuerde, la solicitud se reenvía del servlet al JSP, lo que da como resultado una nueva solicitud. Funciona, créeme, yo uso esta técnica yo mismo. – skaffman
uso apropiado del ConversionPattern al configurar log4j, por ejemplo:
%d [%C] %-5p %c - %m%n
Aquí, el% de C emite el nombre de clase completo cuando se llama a cualquiera de los métodos de la clase Logger.
En primer lugar, importar el paquete requerido es decir
<%@page import="org.apache.log4j.Logger"%>
entonces,
<%! static Logger logger = Logger.getLogger(jsppagename_jsp.class); %>
la jsppagename_jsp
puede cambiar, de acuerdo con el servidor que está utilizando. Y luego, utilizar en cualquier lugar dentro de JSP como:
<% logger.info("This is test."); %>
El IDE puede mostrar un mensaje de error en la declaración de objeto registrador. Pero no se preocupe, el servidor como Tomcat creará automáticamente la clase de servlet correspondiente de cada página jsp dentro de tomcat directamente.
debería ser como: <% @ page import = "org.apache.log4j.Logger"%> –
Esto funciona muy bien. Quiero señalar que la parte '_jsp' del nombre de clase es esencial para encontrar la clase. ¡Me encanta que JSPs registren su nombre de clase! – Noumenon
Dado que es probable que desea emitir el contenido de las variables-el-JSP en log4net puede utilizar este código
<%@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")); %>
Aunque una vieja pregunta, me gustaría ofrecer algunas opciones. Diga jsp filename = for_example.jsp:
1.Utilizar nombre de archivo directamente, sino que en lugar de punto con subrayado
Logger log = Logger.getLogger("for_example_jsp");
(nota: en constante error es utilizar 'for_example.jsp' directamente, será tratado como nombre de la clase y luego, cuando el servidor AP, Tomcat decir, no encuentra tales ruta de clase, lo hará mensaje de registro de salida en catalina.out como "... (JSP) ....".
2. uso petición URI
Logger log = Logger.getLogger(request.getRequestURI());
Alguien le gusta esto. yo no sé por qué, pero he visto esto antes en los códigos de alguien. Nombre
3. Uso Clase
Logger log = Logger.getLogger(this.getClass());
lo cual suele conseguir 'for_example_jsp" excepto cuando for_example.jsp está incluido en algún otro servlet, dicen 'test_servlet', será 'incluyendo el nombre del archivo de registro '+ 'un número ordenada', por ejemplo test_servlet_include_005.
4. Programatically obtener el nombre de archivo JSP
String __jspName = this.getClass().getSimpleName(); // Get jsp program name
Logger log = Logger.getLogger(__jspName);
__jspName = __jspName.replaceAll("_","."); // get back true jsp file name
Sin embargo, esto no es necesariamente correcto con respecto a qué servidor AP y versión está utilizando.
Yo personalmente uso el método 1 porque creo que es más confiable.
- 1. ¿Cuál es la forma correcta de usar bitfields en C?
- 2. ¿Cuál es la forma correcta de usar TypeForwardedToAttribute?
- 3. ¿Cuál es la forma correcta de usar scala.io.Source?
- 4. ¿Cuál es la forma correcta de usar maxAge con Express.js?
- 5. ¿Cuál es la forma correcta de usar @synchronized?
- 6. ¿Cuál es la forma correcta de redirigir?
- 7. ¿Cuál es la forma correcta de hacer actualizaciones de diseño con páginas CMS?
- 8. ASP.NET MVC: ¿Cuál es la forma correcta de redirigir a páginas/acciones en MVC?
- 9. ¿Cuál es la forma correcta de usar la Unidad de trabajo/Repositorios dentro de la capa empresarial?
- 10. ¿Cuál es la forma correcta de liberar memoria en C#
- 11. ¿Cuál es la forma correcta de enlazar la propiedad taskid dentro de una actividad de replicación?
- 12. ¿Cuál es la forma correcta de incluir encabezados Qt?
- 13. ¿Cuál es la forma correcta de sangrar Erlang?
- 14. ¿Es esta la forma correcta de usar javax.annotation de JSR305?
- 15. ¿Cuál es la mejor forma de precompilar JSP con Ant
- 16. ¿Cuál es la forma correcta de cerrar H2?
- 17. ¿Cuál es la forma correcta de cargar un ListBox?
- 18. ¿Cuál es la forma correcta de pasar una excepción? (C#)
- 19. ¿Cuál es la forma correcta de incluir un correo electrónico dentro de Javadoc?
- 20. ¿Cuál es la forma correcta de mostrar la InnerException completa?
- 21. ¿Cuál es la forma correcta de detectar Opera usando jQuery?
- 22. ¿Cuál es la forma correcta de probar áreas en excepciones?
- 23. La forma correcta de usar las constantes Globals
- 24. ¿Cuál es la forma estándar/correcta para abrir un archivo adjunto de clip dentro de Ruby?
- 25. ¿Cuál es la forma correcta de ajustar [NSString stringWithFormat:]?
- 26. Cuál es la forma correcta de cerrar una conexión TCP
- 27. ¿Cuál es la forma correcta de degradar una gema?
- 28. ¿Cuál es la forma correcta de manejar eventos en C++?
- 29. ¿Cuál es la forma correcta de nombrar las propiedades del mensaje en i18n?
- 30. ¿Cuál es la forma correcta de poner listas dentro de un párrafo en HTML5?
¿Qué pasa con el registro de JSP directamente? ¿Cuál sería la mejor práctica? –
En Tomcat, la instrucción anterior se imprimirá con solo 'jsp' en el archivo de registro, en lugar de 'source.jsp'. Tienes que usar al menos 'source_jsp' o this.getClass(). –