Java/JSP log4j :WARN Please initialize the log4j system properly

标签 java jsp log4j

我目前正在做java/jsp项目,我无法正确初始化log4j。我想要的是当 Apache Tomcat 服务器启动时,servlet 应该运行并指向“init.jsp”。在“init.jsp”中有“log4j.xml”路径的位置。我想在 aparche tomcat 启动时初始化 log4j。以下是我所做的。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Project01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

  <servlet>
    <servlet-name>init</servlet-name>
    <jsp-file>/init.jsp</jsp-file>
    <load-on-startup>1</load-on-startup>
  </servlet>

</web-app>

init.jsp

<%@ page language="java" import="java.io.*,java.sql.*,javax.naming.*,java.util.*" errorPage="" buffer="none" %>
<%@page import="com.company.util.LogUtil"%>
<%    System.out.println("+++++++++++++++++++");     
%>
<%!

public void jspInit( javax.servlet.jsp.JspWriter out2)throws java.io.IOException{
    System.out.println("+++++++++Init++++++++++++");
    String rPath = getServletConfig().getServletContext().getRealPath("");

    out2.println("rPath  "+rPath);
//location of log4j.xml file
    LogUtil.init(rPath + "/conf/log4j.xml");
    LogUtil.getEventLog().debug("Log initialized");

}
%>
<%
jspInit(out);
%>

问题是当我启动服务器时,服务器没有启动“init.jsp”。所以控制台说

 log4j:WARN No appenders could be found for logger (Login).
 log4j:WARN Please initialize the log4j system properly.

但是当我通过右键单击“init.jsp”页面 -> 运行为 -> 在服务器上运行来手动启动“init.jsp”时,log4j 可以正常工作并且日志可以正确记录。

可能的错误点是“web.xml”没有正确调用“init.jsp”。所以当服务器启动时“init.jsp”不起作用。但我手动启动“init.jsp”。一切正常。

最佳答案

很简单。使用此代码作为 init.jsp。

<%@ page language="java"
    import="java.io.*,java.sql.*,javax.naming.*,java.util.*" errorPage=""
    buffer="none"%>
<%@page import="com.mobios.util.LogUtil"%>

<%
out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"+getServletConfig().getServletContext().getRealPath(""));

%>

<%!
public void jspInit(){
    System.out.println("+++++++++++++++++++Init+++++++++++++++++++++++++");
    String rPath = getServletConfig().getServletContext().getRealPath("");
    System.out.println("rPath "+rPath);
    LogUtil.init(rPath + "/conf/log4j.xml");
    LogUtil.getEventLog().debug("Service initialized,,,,,,,,,,,,,"); 

}
%>

问题出在 jspInit() 函数上。不要使用参数并删除 out2.println (它用于在浏览器中打印结果)。并删除最后一个函数调用。此更改将使您的 init.jsp 正常工作

关于Java/JSP log4j :WARN Please initialize the log4j system properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54434836/

相关文章:

java - 完成测试后,chrome 浏览器不会关闭

java - 成员变量在声明时未能初始化

java - 将 2 个列表插入标签 <c :forEach> for loop Lists synchronously

java - 编译时的 Tomcat JSP 优化

spring - 如何设置 intellij 在日志选项卡而不是输出选项卡中显示日志

java - java中的Openflow Controller ?

java - 为什么我的堆栈代码中的 pop 方法不执行?

xml - JSP trimSpaces 指令不起作用!

java - log4j.properties 配置问题以及 ant 配置

java - 如何在不同的日志文件中记录多个线程?