3 using System
.Threading
;
8 public class WvLogConsole
10 Stream outstr
= Console
.OpenStandardError();
11 string open_header
= null;
12 byte[] nl
= "\n".ToUTF8();
16 outstr
.Write(b
.bytes
, b
.start
, b
.len
);
24 public void writelines(string header
, WvBuf outbuf
)
26 // finish previous partial line, if necessary
28 && open_header
!= null && open_header
!= header
)
35 while ((i
= outbuf
.strchr('\n')) > 0)
37 if (open_header
== null)
43 // ending partial line
46 if (open_header
== null)
48 w(outbuf
.get(outbuf
.used
));
54 public class WvLog
: WvStream
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();
79 string levelstr(L 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";
94 wv
.assert(false, "Unknown loglevel??");
99 public WvLog(string name
, L level
)
105 public WvLog(string name
)
109 public override int write(WvBytes b
)
111 if (level
> maxlevel
)
112 return b
.len
; // pretend it's written
114 WvBuf outbuf
= new WvBuf();
116 recv
.writelines(wv
.fmt("{0}<{1}>: ", name
, levelstr(level
)),
121 public void print(L level
, object s
)
133 public void print(L level
, string fmt
, params object[] args
)
135 if (level
> maxlevel
)
137 print(level
, (object)String
.Format(fmt
, args
));
140 public override void print(object o
)
142 if (level
> maxlevel
)
147 public WvLog
split(L level
)
149 return new WvLog(name
, level
);