www.pudn.com > 33_online_store.rar > 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