【发布时间】:2018-04-02 03:02:07
【问题描述】:
所以,我在 Web 应用程序中使用 Log4J 做一个简单的练习。这是我的代码:
package tot;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
* Servlet implementation class pro
*/
@WebServlet("/pro")
public class pro extends HttpServlet {
private static final long serialVersionUID = 1L;
private Logger logg = null;
public void inut() {
logg = Logger.getRootLogger();
BasicConfigurator.configure();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logg.setLevel(Level.FATAL);
logg.debug("debug");
logg.info("info");
logg.warn("warn");
logg.error("error");
logg.fatal("fatal");
response.setContentType("text/html");
PrintWriter printwriter = response.getWriter();
printwriter.println("<html>");
printwriter.println("<head><title>log4j</title></head>");
printwriter.println("<body>");
printwriter.println("no config <br>");
printwriter.println("logger name: " + logg.getName());
printwriter.println("</body>");
printwriter.println("</html>");
}
}
我创建了一个动态 Web 项目并使用 apache tomcat 9.0.6 运行时。我还创建了一个 servlet。当我运行我的代码时,我收到以下错误消息:
HTTP Status 500 – Internal Server Error
Type Exception Report
Description The server encountered an unexpected condition that prevented it
from fulfilling the request.
Exception
java.lang.NullPointerException
tot.pro.doGet(pro.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/9.0.6
此外,控制台会打印以下错误消息:
java.lang.NullPointerException
at tot.pro.doGet(pro.java:31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:407)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
我期望发生的是显示标题和正文消息的 http 页面;并且记录器消息“致命”应该打印到控制台。根据我的研究,我找到的解决方案是清除缓存、网页浏览历史记录和刷新页面(我已经完成了)。我觉得错误是由我设置服务器的方式产生的,但我找不到我做错了什么。
非常感谢任何帮助。
【问题讨论】:
-
如果有人决定测试我的代码,我从 apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip 下载了 log4j jar 文件
-
也许你的意思是
public void init() {不是inut -
我发誓你一定会喜欢那些完全搞砸你的代码的小错误,谢谢@scary wombat
-
如果您使用了
@override注释,您的 IDE 会通知您此错误
标签: java eclipse http servlets log4j