2017-06-23 53 views
0

我正在使用Jetty嵌入式服務器,從遺留的jar中構建一個REST api,它有很多對println非常有用的調用(我運行它的類並在控制檯中輸出東西)。我正在嘗試將這些printlns與請求狀態一起存儲在一個文件中,但NCSARequestLog僅記錄文件日期和響應代碼。有沒有辦法記錄文件中的所有內容?我非常確定這是可能的,因爲在將舊版jar包裝到部署到Glassfish的war文件中之前,以及所有打印用於顯示在服務器日誌中。Can Jetty能夠將System.out和System.err捕獲到日誌文件嗎?

由於

回答

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"); 
    } 
} 
相關問題