package com.vip.saturn.job.utils; import java.io.PrintStream; import org.apache.commons.exec.LogOutputStream; /** * 捕获System.out输出 * @author dylan.xue * */ public class SaturnLogOutputStream extends LogOutputStream { private static final int MAX_LINE = 100; private static ThreadLocal<LRUList<String>> lists = new InheritableThreadLocal<LRUList<String>>() { @Override protected LRUList<String> initialValue() { return new LRUList<String>(MAX_LINE); } }; private static PrintStream catchedOut = new PrintStream(new SaturnLogOutputStream(1)); private static PrintStream out = System.out; //NOSONAR static { System.setOut(catchedOut); } private SaturnLogOutputStream(int level) { super(level); } protected void processLine(String line, int level) { LRUList<String> lruList = (LRUList<String>) lists.get(); lruList.put(line); out.println(line); } public static void initLogger() { lists.get().clear(); } private static void clearCache(){ lists.remove(); } public static String clearAndGetLog() { try{ StringBuilder sb = new StringBuilder(); LRUList<String> lruList = (LRUList<String>) lists.get(); for (String line : lruList) { sb.append(line).append(System.lineSeparator()); } lruList.clear(); clearCache(); return sb.toString(); }catch(Exception e){//NOSONAR return ""; } } }