📄 debuglog.java
字号:
import java.io.*;import java.net.*;import LogServer;public class DebugLog extends Object{ private Socket server; private String serverName; private BufferedReader serverReader; private PrintWriter log; private static DebugLog sharedLog; public static synchronized DebugLog getSharedLog() { if(sharedLog == null) sharedLog = new DebugLog(); return sharedLog; } public DebugLog() { log = null; } public synchronized boolean initialized() { return ((log != null)||(serverName!=null)); } public synchronized void log(String str) { if((log != null)||(serverName!=null))//exit quick if no log { log(str,true);//retry } } public synchronized void log(Exception exp) { if((log != null)||(serverName!=null))//exit quick if no log { StringWriter out; PrintWriter printOut; String logTrace; StringReader in; BufferedReader bufIn; String curLine; try { out = new StringWriter(); printOut = new PrintWriter(out); exp.printStackTrace(printOut); printOut.close(); logTrace = out.toString(); in = new StringReader(logTrace); bufIn = new BufferedReader(in); while((curLine = bufIn.readLine()) != null) { log(curLine,true); } bufIn.close(); } catch(Exception ex) { } } } //protected method that allows the logger to reconnect //to a server protected synchronized void log(String str,boolean retry) { boolean error=false; if(log != null)//exit quick if no log { try { log.println(str); if(serverReader != null) { //Read the response, but ignore //This should force an exception // if the socket is closed serverReader.readLine(); } } catch(Exception ex) { error = true; closeLog(); } } else { error = true; } if((serverName != null) && error) { if(retry) { logTo(serverName); log(str,false);//only retry one time } else { closeLog(); } } } public synchronized void logTo(File f) { if(f!=null) { closeLog(); try { FileWriter fileIn = new FileWriter(f.getAbsolutePath(),true); log = new PrintWriter(fileIn,true); } catch(Exception exp) { log = null; } } } public synchronized void logTo(OutputStream stream) { if(stream!=null) { closeLog(); try { log = new PrintWriter(stream,true); } catch(Exception exp) { log = null; } } } public synchronized void logTo(String logServer) { if(logServer!=null) { closeLog(); serverName = logServer; try { server = new Socket(logServer,LogServer.DEFAULT_PORT); InputStreamReader readIn; readIn = new InputStreamReader(server.getInputStream()); serverReader = new BufferedReader(readIn); log = new PrintWriter(server.getOutputStream(),true); server.setSoTimeout(2000);//two seconds } catch(Exception exp) { log = null; server = null; } } } public synchronized void closeLog() { if((log!=null)&&(server!=null)) { try { log.println(LogServer.DISCONNECT_MSG); } catch(Exception exp) { } } if(log != null) { log.flush(); log.close(); log = null; } if(server != null) { try { if(serverReader != null) serverReader.close(); server.close(); server = null; serverReader = null; } catch(Exception ex) { } } } public synchronized void finalize() { closeLog(); }}class DebugLogTester{ public static int MSG_COUNT=100; public static void main(String[] args) { DebugLog logger = DebugLog.getSharedLog(); int i; System.out.println("Created log."); logger.logTo("192.168.0.172"); System.out.println("Set log dest."); System.out.println("Logging messages."); for(i=0;i<MSG_COUNT;i++) { try { logger.log("Test "+i); Thread.sleep(100); } catch(Exception exp) { System.out.println("Exception: "+exp); } } System.out.println("Closing log."); logger.closeLog(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -