日志和服务器控制台

时间:2013-04-22 09:19:40

标签: java logging

我在这里的日志概述中学习: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();
    }
}

我的问题是日志消息显示两次(一个在Server Console中,一个在Logs文件中,我该怎么办才能看到消息只有日志文件而不是在控制台中?)和另一个问题是对于带有Lever SEVERE的记录器,我只在Server Console中看到错误消息。已创建的.txt mylogs.txt为空。为什么会这样?

1 个答案:

答案 0 :(得分:0)

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");