sm.exe: add bookmarks and default values.
[versaplex.git] / wvdotnet / wvlog.cs
bloba395fa7544ef8d8a9ad04ca37ce3241a99c9cc18
1 using System;
2 using System.IO;
3 using System.Threading;
4 using Wv.Extensions;
6 namespace Wv
8 public class WvLogConsole
10 Stream outstr = Console.OpenStandardError();
11 string open_header = null;
12 byte[] nl = "\n".ToUTF8();
14 void w(WvBytes b)
16 outstr.Write(b.bytes, b.start, b.len);
19 void w(string s)
21 w(s.ToUTF8());
24 public void writelines(string header, WvBuf outbuf)
26 // finish previous partial line, if necessary
27 if (outbuf.used > 0
28 && open_header != null && open_header != header)
30 w(nl);
31 open_header = null;
34 int i;
35 while ((i = outbuf.strchr('\n')) > 0)
37 if (open_header == null)
38 w(header);
39 w(outbuf.get(i));
40 open_header = null;
43 // ending partial line
44 if (outbuf.used > 0)
46 if (open_header == null)
47 w(header);
48 w(outbuf.get(outbuf.used));
49 open_header = header;
54 public class WvLog : WvStream
56 public enum L {
57 Critical = 0,
58 Error,
59 Warning,
60 Notice,
61 Info,
62 Debug, Debug1=Debug,
63 Debug2,
64 Debug3,
65 Debug4,
66 Debug5,
69 static L _maxlevel = L.Info;
70 public static L maxlevel {
71 get { return _maxlevel; }
72 set { _maxlevel = value; }
74 static WvLogConsole recv = new WvLogConsole();
76 string name;
77 L level;
79 string levelstr(L level)
81 switch (level)
83 case L.Critical: return "!";
84 case L.Error: return "E";
85 case L.Warning: return "W";
86 case L.Notice: return "N";
87 case L.Info: return "I";
88 case L.Debug1: return "1";
89 case L.Debug2: return "2";
90 case L.Debug3: return "3";
91 case L.Debug4: return "4";
92 case L.Debug5: return "5";
93 default:
94 wv.assert(false, "Unknown loglevel??");
95 return "??";
99 public WvLog(string name, L level)
101 this.name = name;
102 this.level = level;
105 public WvLog(string name)
106 : this(name, L.Info)
109 public override int write(WvBytes b)
111 if (level > maxlevel)
112 return b.len; // pretend it's written
114 WvBuf outbuf = new WvBuf();
115 outbuf.put(b);
116 recv.writelines(wv.fmt("{0}<{1}>: ", name, levelstr(level)),
117 outbuf);
118 return b.len;
121 public void print(L level, object s)
123 L old = this.level;
124 try {
125 this.level = level;
126 print(s);
128 finally {
129 this.level = old;
133 public void print(L level, string fmt, params object[] args)
135 if (level > maxlevel)
136 return;
137 print(level, (object)String.Format(fmt, args));
140 public override void print(object o)
142 if (level > maxlevel)
143 return;
144 base.print(o);
147 public WvLog split(L level)
149 return new WvLog(name, level);