Dave Noha writes:
I have a related problem: I`d like to reuse the
RequestClient, but it`s talking to the Logger
directly via static methods and I find that
unacceptable. I`d like more control over logging...
Well, I started down the road of making Logger subclassable, and
then wondered -- isn't the ability to replace the Logger PrintStream
adequate? The logging messages are largely text anyhow. Dave, can you
give specific examples on what you'd like to be able to do?
Attached are some of the changes I made on the road to subclassing,
since they're useful in and of themselves, and are a necessary step on
the way to a subclassable logger should someone actually want to go to
the effort.
cvs server: Diffing .
Index: ConnectionHandler.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/ConnectionHandler.java,v
retrieving revision 1.24
diff -u -u -r1.24 ConnectionHandler.java
--- ConnectionHandler.java 2000/04/09 15:48:36 1.24
+++ ConnectionHandler.java 2000/04/11 18:13:38
@@ -77,7 +77,7 @@
}
String logstr=m.messageType+" <- "+c.getPeerAddress();
- if(Logger.verbosity>0) logstr=Long.toHexString(msg.id)+" - "+logstr;
+ if (Logger.getVerbosity() > 0) logstr = Long.toHexString(msg.id) + " -
" + logstr;
Logger.log("ConnectionHandler.java#"+id,logstr,Logger.NORMAL);
Logger.log("ConnectionHandler.java#"+id,"Message:\n"+msg,Logger.DEBUG);
@@ -134,7 +134,7 @@
Logger.log("ConnectionHandler.java#"+id,"Sending a
message",Logger.DEBUGGING);
RawMessage raw=m.toRawMessage();
String logstr=raw.messageType+" -> "+c.getPeerAddress();
- if(Logger.verbosity>0) logstr=Long.toHexString(m.id)+" - "+logstr;
+ if (Logger.getVerbosity() > 0) logstr = Long.toHexString(m.id) + " - "
+ logstr;
Logger.log("ConnectionHandler.java#"+id,logstr,Logger.NORMAL);
synchronized(c.out) {
try {
Index: HandshakeFactory.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/HandshakeFactory.java,v
retrieving revision 1.1
diff -u -u -r1.1 HandshakeFactory.java
--- HandshakeFactory.java 2000/03/01 18:19:31 1.1
+++ HandshakeFactory.java 2000/04/11 18:13:38
@@ -35,14 +35,14 @@
catch(InvocationTargetException e)
{
Logger.log("HandshakeFactory.java","Handshake constructor threw
exception:",Logger.ERROR);
- e.getTargetException().printStackTrace(Logger.Lout);
+ e.getTargetException().printStackTrace(Logger.getOutput());
}
catch(ClassNotFoundException e) {
Logger.log("HandshakeFactory.java","Unknown
messagetype.",Logger.NORMAL);
}
catch(Exception e)
{
- e.printStackTrace(Logger.Lout);
+ e.printStackTrace(Logger.getOutput());
}
return null;
}
Index: MessageFactory.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/MessageFactory.java,v
retrieving revision 1.8
diff -u -u -r1.8 MessageFactory.java
--- MessageFactory.java 2000/04/05 22:14:08 1.8
+++ MessageFactory.java 2000/04/11 18:13:38
@@ -39,7 +39,7 @@
throw (InvalidMessageException) e.getTargetException();
else {
Logger.log("MessageFactory.java","Message constructor threw
exception:",Logger.ERROR);
- e.getTargetException().printStackTrace(Logger.Lout);
+ e.getTargetException().printStackTrace(Logger.getOutput());
throw new InvalidMessageException("Message constructor threw
unkown exception.");
}
}
@@ -49,7 +49,7 @@
}
catch(Exception e)
{
- e.printStackTrace(Logger.Lout);
+ e.printStackTrace(Logger.getOutput());
throw new InvalidMessageException("Unknown Error");
}
cvs server: Diffing client
Index: client/InsertClient.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/client/InsertClient.java,v
retrieving revision 1.32
diff -u -u -r1.32 InsertClient.java
--- client/InsertClient.java 2000/04/09 21:09:09 1.32
+++ client/InsertClient.java 2000/04/11 18:13:38
@@ -43,7 +43,7 @@
static public void main(String[] args)
{
// parse command line
- Logger.threshold = Logger.ERROR;
+ Logger.setThreshold(Logger.ERROR);
Params params = new Params(args);
// check arguments
@@ -77,17 +77,11 @@
SHA1 sha = new SHA1(true);
Key key = new StringKey(sha.doHash(params.getArg(0)));
long htl = params.getlong("htl", defaultHopsToLive);
- Logger.verbosity = params.getint("verbosity",defaultVerbosity);
+ Logger.setVerbosity(params.getint("verbosity",defaultVerbosity));
if (params.getParam("logging")==null)
- Logger.threshold = defaultLogging;
- else if (params.getParam("logging").equalsIgnoreCase("error"))
- Logger.threshold = Logger.ERROR;
- else if (params.getParam("logging").equalsIgnoreCase("normal"))
- Logger.threshold = Logger.NORMAL;
- else if (params.getParam("logging").equalsIgnoreCase("minor"))
- Logger.threshold = Logger.MINOR;
- else if (params.getParam("logging").equalsIgnoreCase("debugging"))
- Logger.threshold = Logger.DEBUGGING;
+ Logger.setThreshold(defaultLogging);
+ else
+ Logger.setThreshold(Logger.ERROR);
String keyindex=params.getParam("keyindex");
if(keyindex!=null)
@@ -131,7 +125,7 @@
Core.handshakeLife=1000000;
Core.timer=new Ticker(500);
- Logger.threshold=Logger.NORMAL;
+ Logger.setThreshold(Logger.NORMAL);
InsertClient ic = new InsertClient(addr, lstaddr, htl, (Math.abs((new
Random()).nextLong()) % 30));
Index: client/RequestClient.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/client/RequestClient.java,v
retrieving revision 1.33
diff -u -u -r1.33 RequestClient.java
--- client/RequestClient.java 2000/04/09 21:09:09 1.33
+++ client/RequestClient.java 2000/04/11 18:13:38
@@ -33,7 +33,7 @@
static public void main(String[] args)
{
// parse command line
- Logger.threshold = Logger.ERROR;
+ Logger.setThreshold(Logger.ERROR);
Params params = new Params(args);
String keyindex=params.getParam("keyindex");
@@ -78,16 +78,10 @@
Key key = new StringKey(sha.doHash(params.getArg(0)));
long htl = params.getlong("htl", defaultHopsToLive);
if (params.getParam("logging")==null)
- Logger.threshold = defaultLogging;
- else if (params.getParam("logging").equalsIgnoreCase("error"))
- Logger.threshold = Logger.ERROR;
- else if (params.getParam("logging").equalsIgnoreCase("normal"))
- Logger.threshold = Logger.NORMAL;
- else if (params.getParam("logging").equalsIgnoreCase("minor"))
- Logger.threshold = Logger.MINOR;
- else if (params.getParam("logging").equalsIgnoreCase("debugging"))
- Logger.threshold = Logger.DEBUGGING;
- Logger.verbosity = params.getint("verbosity",defaultVerbosity);
+ Logger.setThreshold(defaultLogging);
+ else
+ Logger.setThreshold(params.getParam("logging"));
+ Logger.setVerbosity(params.getint("verbosity",defaultVerbosity));
// open output file, if specified (default stdout)
OutputStream out = System.out;
@@ -108,7 +102,7 @@
Core.connectTimeout=10000;
Core.timer=new Ticker(500);
- Logger.threshold=Logger.NORMAL;
+ Logger.setThreshold(Logger.NORMAL);
RequestClient rc = new RequestClient(addr, lstaddr, htl, (Math.abs((new
Random()).nextLong()) % 30));
cvs server: Diffing client/pixmaps
cvs server: Diffing contrib
cvs server: Diffing contrib/FCRC
cvs server: Diffing contrib/FGUI
Index: contrib/FGUI/SimpleInsertClient.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/contrib/FGUI/SimpleInsertClient.java,v
retrieving revision 1.1
diff -u -u -r1.1 SimpleInsertClient.java
--- contrib/FGUI/SimpleInsertClient.java 2000/04/09 05:24:29 1.1
+++ contrib/FGUI/SimpleInsertClient.java 2000/04/11 18:13:38
@@ -25,7 +25,7 @@
Core.handshakeLife=1000000;
if (Core.timer == null)
{Core.timer=new Ticker(500);}
- Logger.threshold=Logger.NORMAL;
+ Logger.setThreshold(Logger.NORMAL);
InsertClient ic = new InsertClient(addr, lstaddr, htl,
(Math.abs((new Random()).nextLong()) % 30));
Index: contrib/FGUI/SimpleRequestClient.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/contrib/FGUI/SimpleRequestClient.java,v
retrieving revision 1.2
diff -u -u -r1.2 SimpleRequestClient.java
--- contrib/FGUI/SimpleRequestClient.java 2000/04/09 20:30:46 1.2
+++ contrib/FGUI/SimpleRequestClient.java 2000/04/11 18:13:38
@@ -28,7 +28,7 @@
if (Core.timer == null)
{Core.timer=new Ticker(500);}
- Logger.threshold=Logger.NORMAL;
+ Logger.setThreshold(Logger.NORMAL);
RequestClient rc = new RequestClient(addr, lstaddr, htl,
(Math.abs((new Random()).nextLong()) % 30));
DataReply reply = rc.request(key);
cvs server: Diffing contrib/Liberator
cvs server: Diffing contrib/fproxy
Index: contrib/fproxy/ProxyServer.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/contrib/fproxy/ProxyServer.java,v
retrieving revision 1.2
diff -u -u -r1.2 ProxyServer.java
--- contrib/fproxy/ProxyServer.java 2000/04/08 16:50:35 1.2
+++ contrib/fproxy/ProxyServer.java 2000/04/11 18:13:38
@@ -30,7 +30,7 @@
public int listenPort;
public String serverAddress;
public long hopsToLive;
- public PrintStream Lout = Logger.Lout;
+ public PrintStream Lout = Logger.getOutput();
// defaults
static private int defaultListenPort = 80;
@@ -41,7 +41,7 @@
static public void main(String[] args) {
// parse command line
- Logger.threshold = Logger.ERROR;
+ Logger.setThreshold(Logger.ERROR);
Params params = new Params(args);
// check for help
@@ -58,16 +58,10 @@
// set logging
if (params.getParam("logging")==null)
- Logger.threshold = defaultLogging;
- else if (params.getParam("logging").equalsIgnoreCase("error"))
- Logger.threshold = Logger.ERROR;
- else if (params.getParam("logging").equalsIgnoreCase("normal"))
- Logger.threshold = Logger.NORMAL;
- else if (params.getParam("logging").equalsIgnoreCase("minor"))
- Logger.threshold = Logger.MINOR;
- else if (params.getParam("logging").equalsIgnoreCase("debugging"))
- Logger.threshold = Logger.DEBUGGING;
- Logger.verbosity = params.getint("verbosity",defaultVerbosity);
+ Logger.setThreshold(defaultLogging);
+ else
+ Logger.setThreshold(params.getParam("logging"));
+ Logger.setVerbosity(params.getint("verbosity",Logger.getVerbosity()));
String fname = params.getParam("logFile","NO");
if (!fname.equalsIgnoreCase("NO")) {
@@ -77,7 +71,7 @@
System.out.println("Writing to log failed");
}
}
- ps.Lout = Logger.Lout;
+ ps.Lout = Logger.getOutput();
// bind local port
ServerSocket sock;
cvs server: Diffing contrib/namelist
cvs server: Diffing crypt
cvs server: Diffing docs
cvs server: Diffing message
cvs server: Diffing node
Index: node/Node.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/node/Node.java,v
retrieving revision 1.15
diff -u -u -r1.15 Node.java
--- node/Node.java 2000/04/08 20:48:17 1.15
+++ node/Node.java 2000/04/11 18:13:38
@@ -43,7 +43,7 @@
// parse command line
String[] rcfiles = {".freenetrc", "freenet.ini"};
- Logger.threshold = Logger.ERROR;
+ Logger.setThreshold(Logger.ERROR);
params = new Params(rcfiles, args);
// check for help
@@ -57,16 +57,10 @@
}
if (params.getParam("logging")==null)
- Logger.threshold = Logger.NORMAL;
- else if (params.getParam("logging").equalsIgnoreCase("error"))
- Logger.threshold = Logger.ERROR;
- else if (params.getParam("logging").equalsIgnoreCase("normal"))
- Logger.threshold = Logger.NORMAL;
- else if (params.getParam("logging").equalsIgnoreCase("minor"))
- Logger.threshold = Logger.MINOR;
- else if (params.getParam("logging").equalsIgnoreCase("debugging"))
- Logger.threshold = Logger.DEBUGGING;
- Logger.verbosity = params.getint("verbosity",Logger.verbosity);
+ Logger.setThreshold(Logger.NORMAL);
+ else
+ Logger.setThreshold(params.getParam("logging"));
+ Logger.setVerbosity(params.getint("verbosity", Logger.getVerbosity()));
String fname = params.getParam("logFile","NO");
if (!fname.equalsIgnoreCase("NO")) {
cvs server: Diffing scripts
cvs server: Diffing support
Index: support/Logger.java
===================================================================
RCS file: /cvsroot/freenet/Freenet/support/Logger.java,v
retrieving revision 1.9
diff -u -u -r1.9 Logger.java
--- support/Logger.java 2000/04/08 16:54:44 1.9
+++ support/Logger.java 2000/04/11 18:13:38
@@ -6,23 +6,39 @@
public class Logger
{
/** The stream to which the log should be sent **/
- public static PrintStream Lout = System.err;
+ private static PrintStream Lout = System.err;
/** The minimum priority message that will be printed to Lout, one
* of Logger.ERROR, Logger.NORMAL, Logger.MINOR, or Logger.DEBUGGING **/
/** This message indicates an error which prevents correct functionality **/
- public static int ERROR = 3;
+ final public static int ERROR = 3;
/** A normal level occurance **/
- public static int NORMAL = 2;
+ final public static int NORMAL = 2;
/** A minor occurance that wouldn't normally be of interest **/
- public static int MINOR = 1;
+ final public static int MINOR = 1;
/** An occurance which would only be of interest during debugging **/
- public static int DEBUGGING = 0;
- public static int DEBUG = DEBUGGING;
+ final public static int DEBUGGING = 0;
+ final public static int DEBUG = DEBUGGING;
- public static int threshold = DEBUGGING;
- public static int verbosity = 5;
- public static String terminator = "\n";
+ private static int threshold = DEBUGGING;
+ private static int verbosity = 5;
+ private static String terminator = "\n";
+
+ public static PrintStream getOutput() {return Lout;}
+
+ public static int getVerbosity() {return verbosity;}
+ public static void setVerbosity(int aNumber) {verbosity = aNumber;}
+
+ public static void setThreshold(int aNumber) {threshold = aNumber;}
+
+ public static void setThreshold(String aString) {
+ String[] names = {"error", "normal", "minor", "debugging", "debug"};
+ int[] levels = {ERROR, NORMAL, MINOR, DEBUGGING, DEBUG};
+
+ for (int i = 0; i < names.length; i++)
+ if (aString.equalsIgnoreCase(names[i]))
+ setThreshold(levels[i]);
+ }
private static DateFormat df = DateFormat.getDateTimeInstance();
_______________________________________________
Freenet-dev mailing list
Freenet-dev at lists.sourceforge.net
http://lists.sourceforge.net/mailman/listinfo/freenet-dev