您的位置:首页 > 其它

如何实现把web项目的输出流重置,并将打印语句结果写到日志文件

2013-05-24 15:26 971 查看
在websphere服务器配置日志的时候有一项内容,可以吧程序里的打印语句内容输出到日志文件中,即web项目中的java类或者jsp页面中的system.out.print(“XX”)的内容

写到指定的日志文件里,而不是输出到控制台。

如果不用应用服务器的配置,在web项目中如何实现这个功能的呢?

重置输出流的语句如下,

PrintStream out = new PrintStream(new File(context.getRealPath("/")+"sysout.log"),"UTF-8");

System.setOut(out);

这个语句放什么地方合适呢?

一开始想到了过滤器,在web.xml中配置所有请求都走这个过滤器,可是问题出来了,每个请求执行一次该过滤器操作便会将日志文件重置,即日志文件只能记录最后一次请求中的打印内容,不能实现想要的功能。

那怎么办呢,于是想到了监听器,可以在web服务启动时重置输出流 ,这样就能实现想要的功能了。

首先创建监听器,在监听器内重置输出流,代码如下:

package test.servlet;

import java.io.*;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class MyContextListener implements ServletContextListener {

private ServletContext context = null;

@Override

public void contextInitialized(ServletContextEvent sce)

{

context = sce.getServletContext();

System.out.println(context.getRealPath("/"));

PrintStream out;

try

{

out = new PrintStream(new File(context.getRealPath("/")+"sysout.log"),"UTF-8");

System.setOut(out);

}

catch (Exception e)

{

e.printStackTrace();

}

}

@Override

public void contextDestroyed(ServletContextEvent sce)

{

}

}

然后在web.xml配置监听器,如下:

<listener>

<listener-class>test.servlet.MyContextListener</listener-class>

</listener>

这样启动web项目之后,所有的打印语句system.out.print(“XX”)的输出结果都会记录在指定的文本文件中了。

至于websphere服务器是怎么实现的,还没有搞明白,肯定不会这么简单,这样做仅仅对单个web项目有用,而websphere服务器的日志配置是对本台服务器上的所有web项目都会起作用,实现起来应该比较复杂的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐