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

在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项目都会起作用,实现起来应该比较复杂的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值