Jetty可以将System.out和System.err捕获到日志文件中吗?

时间:2017-06-23 15:47:35

标签: java logging jetty embedded-jetty

我正在使用Jetty嵌入式服务器,从遗留jar中构建REST api,它对println有很多非常有用的调用(我运行它的类并在控制台中打印东西)。我现在正在尝试将这些printlns与请求状态一起放在文件中,但NCSARequestLog仅记录文件日期和响应代码。有没有办法记录文件中的所有内容呢?我很确定这是可能的,因为在我们将旧版jar包装到部署到Glassfish的war文件中之前,所有打印都用于显示在服务器日志中。

由于

1 个答案:

答案 0 :(得分:0)

jetty-util-<ver>.jar中有一个名为RolloverFileOutputStream的类,可以实例化,然后设置为接管System.outSystem.err

的滚动

这方面的一个例子:

package demo;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.TimeZone;

import org.eclipse.jetty.util.RolloverFileOutputStream;

public class ConsoleCaptureDemo
{
    public static void main(String[] args) throws IOException
    {
        File loggingDir = new File("logs");
        if (!loggingDir.exists())
        {
            if (!loggingDir.mkdirs())
            {
                throw new RuntimeException("Unable to create directory: " + loggingDir);
            }
        }

        String loggingFile = new File(loggingDir, "yyyy_mm_dd.jetty.log").getAbsolutePath();
        boolean append = false;
        int retainDays = 90;
        TimeZone zone = TimeZone.getTimeZone("GMT");
        RolloverFileOutputStream logStream = new RolloverFileOutputStream(loggingFile, 
             append, retainDays, zone);
        System.out.println("Look at " + logStream.getFilename());
        PrintStream logWriter = new PrintStream(logStream);

        System.setOut(logWriter);
        System.setErr(logWriter);

        System.out.println("From System.out - hi there");
        System.err.println("From System.err - hello again");
    }
}