日志和服务器控制台
我在这里查看日志概述:http://docs.oracle.com/javase/6/docs/technotes/guides/logging/overview.html#1.15 我有以下问题。我创建了一个简单的Web应用程序,我使用下面的代码:日志和服务器控制台
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Logger logger = Logger.getLogger("com.NewServlet.severe");
Logger logger2 = Logger.getLogger("com.NewServlet.Fine");
Handler fh=new FileHandler("/C:/Html/mylogs.txt");
Handler fh2=new FileHandler("/C:/Html/mylogs2.txt");
//Logger.getLogger("com.NewServlet").addHandler(fh);
//Logger.getLogger("com.NewServlet.Fine").addHandler(fh2);
// Logger.getLogger("com.NewServlet").setLevel(Level.SEVERE);
// Logger.getLogger("com.NewServlet.Fine").setLevel(Level.FINE);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String number=request.getParameter("value");
Integer num=Integer.valueOf(number);
int a= num.parseInt(number);
int result=0;
try {
/*
* TODO output your page here. You may use following sample code.
*/
result=20/a;
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NewServlet</title>");
out.println("</head>");
out.println("<body>");
//logger2.fine("doing stuff");
logger2.addHandler(fh2);
logger2.setLevel(Level.FINE);
logger2.fine("doing ALL OK");
//logger2.log(Level.FINE,"doing OK");
out.println("<h1>Servlet NewServlet at " + result + "</h1>");
out.println("</body>");
out.println("</html>");
}
catch (Exception e1){
logger.addHandler(fh);
logger.setLevel(Level.SEVERE);
logger.log(Level.SEVERE, "troubles", e1);
e1.printStackTrace();
}
finally {
out.close();
}
}
我的问题是所显示的日志信息两次(一个在服务器控制台,一个在日志文件中,我能做些什么使我可以看到消息只有日志文件,而不是在控制台?),另一个问题是对于带有Lever SEVERE的记录器,我只能在服务器控制台中看到错误消息。已创建的.txt mylogs.txt为空。为什么会发生?
e1.printStackTrace();
将在控制台中打印堆栈跟踪。删除和当您设置记录器级别打印在日志文件中的堆栈跟踪(你已经这样做)
logger.log(LEVEL, MSG, EXCEPION_OBJECT)
为SEVERE
[具有最高值],低于所有级别都将被丢弃并且它们不会被打印到文件中。
你的日志文件扩展名重命名从.txt
到.log
Handler fh=new FileHandler("/C:/Html/mylogs.log");
Handler fh2=new FileHandler("/C:/Html/mylogs2.log");
我做到了,当我有一个异常现在everythng工作正常,但是当代码没有任何异常logger2是空的,并且服务器控制台显示我已经定义在FINE级别的相关消息,这是否合理? – 2013-04-22 10:16:04
因此,如果您能够在'mylogs2.log'文件中看到'logger2.log()'消息并在'mylogs.log'文件中看到异常消息,那么事情就很好。 – 2013-04-22 10:20:13
因为,你正在使用e1.printStackTrace();这将写入默认为服务器日志的控制台。 – IndoKnight 2013-04-22 09:38:10