将System.out.println()打印的内容输出到文件

来源:互联网 发布:clojure编程 中文 编辑:程序博客网 时间:2024/04/27 13:45


1.


 

  今天分析了一个项目。认为很有必要将System.out.println()的内容当做日志保存起来.为以后程序运行的分析提供依据.所以经过查找和思考.总结出了以下的方法.
   在windows下,通过重定向方式启动程序.下面是启动文件startup.bat
    java -jarIceColdMonitor.jar >>c:log.txt
但这样做还不够完美,我们希望可以保存到当前项目的相对路径下,同时改一下后缀名(tomcat的日志用的就是*.log),则改成如下:
    java -jarIceColdMonitor.jar >>record.log
   但是这样使用,扔存在个问题,下次程序启动的时候会把先前日志给覆盖,所以我们用日期当作日志的名字.
    java -jarIceColdMonitor.jar>>log%date:~0,10%.log

   好了.这样就可以完美记录日志了.在linux下的使用方式也是一样的,通过重定向来实现该功能.如果想更强大的方式记录日志,则需要通过log4j来实现.^-^



2.System.setOut();

package com;

import java.io.PrintStream;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.logging.impl.LogFactoryImpl;
/**
 * 把在程序中的System.out.print()的信息自动转成日志信息
 */
public class StdoutListener implements ServletContextListener {
    public void contextDestroyed(ServletContextEvent event) {
    }
    private void log(Object info) {
        LogFactoryImpl.getLog(getClass()).info(info);
    }
    public void contextInitialized(ServletContextEvent event) {
        PrintStream printStream = new PrintStream(System.out) {
            public void println(boolean x) {
                log(Boolean.valueOf(x));
            }
            public void println(char x) {
                log(Character.valueOf(x));
            }
            public void println(char[] x) {
                log(x == null ? null : new String(x));
            }
            public void println(double x) {
                log(Double.valueOf(x));
            }
            public void println(float x) {
                log(Float.valueOf(x));
            }
            public void println(int x) {
                log(Integer.valueOf(x));
            }
            public void println(long x) {
                log(x);
            }
            public void println(Object x) {
                log(x);
            }
            public void println(String x) {
                log(x);
            }
        };
        System.setOut(printStream);
        System.setErr(printStream);
    }
}
 
0 0
原创粉丝点击