我正在使用Jetty嵌入式服务器,从遗留jar中构建REST api,它对println有很多非常有用的调用(我运行它的类并在控制台中打印东西)。我现在正在尝试将这些printlns与请求状态一起放在文件中,但NCSARequestLog仅记录文件日期和响应代码。有没有办法记录文件中的所有内容呢?我很确定这是可能的,因为在我们将旧版jar包装到部署到Glassfish的war文件中之前,所有打印都用于显示在服务器日志中。
由于
答案 0 :(得分:0)
在jetty-util-<ver>.jar
中有一个名为RolloverFileOutputStream
的类,可以实例化,然后设置为接管System.out
和System.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");
}
}