001: package simpleorm.core;
002:
003: import java.io.PrintStream;
004:
005: /** Very simple logging system. <p>
006:
007: Logging calls are all made <code>SLog.log.</code>method so overriding
008: this class with a subclass of SLog provides full control of the logging if
009: really necessary.*/
010:
011: public class SLog {
012: public int level = 100;
013: public static SLog slog = new SLog(); // ## should probably be in SConfiguration.
014:
015: public void error(String msg) { // Rarely used, normally throw instead.
016: log("#### -ERROR " + SConnection.shortToString() + "_" + msg);
017: }
018:
019: public void warn(String msg) {
020: log("## -WARN " + SConnection.shortToString() + "_" + msg);
021: }
022:
023: // Open, begin, commit etc.
024: public void connections(String msg) {
025: if (level >= 10)
026: log(" -" + msg);
027: }
028:
029: // During flushing
030: public boolean enableUpdates() {
031: return level >= 20;
032: }
033:
034: public void updates(String msg) {
035: if (enableUpdates())
036: log(" -" + msg);
037: }
038:
039: // select() or findOrCreate()
040: public boolean enableQueries() {
041: return level >= 30;
042: }
043:
044: public void queries(String msg) {
045: if (enableQueries())
046: log(" -" + msg);
047: }
048:
049: /**
050: set/get per field. enableFields enables the trace line to be
051: surounded by an if test which is important as fields are an inner
052: loop trace and the StringBuffer concatenation can be very
053: expensive!
054: */
055: public boolean enableFields() {
056: return level >= 40;
057: }
058:
059: public void fields(String msg) {
060: if (enableFields())
061: log(" -" + msg);
062: }
063:
064: /** For detailed temporary traces during development only. */
065: public boolean enableDebug() {
066: return level >= 30;
067: }
068:
069: public void debug(String msg) {
070: if (enableDebug())
071: log(" -" + "(" + msg + ")");
072: }
073:
074: /** For messages that are the ouput, eg. of unit test
075: programs. Never disabled.*/
076: public void message(String msg) {
077: log(" ---" + msg);
078: }
079:
080: protected void log(String msg) {
081: // Specialize this method.
082: getStream().println(SConnection.shortToString() + msg);
083: // err is better than out because that is where stack traces go, and it avoids buffer problems.
084: // also, as out might be redirected, err is simply correct.
085: }
086:
087: public PrintStream getStream() {
088: return System.err;
089: }
090:
091: public static String arrayToString(Object[] array) {
092: if (array == null)
093: return "NULL";
094: StringBuffer res = new StringBuffer("[Array ");
095: for (int ax = 0; ax < array.length; ax++) {
096: if (ax > 0)
097: res.append("|");
098: res.append(array[ax]);
099: }
100: res.append("]");
101: return res.toString();
102: }
103:
104: }
|