33using System . Diagnostics ;
44using System . Linq ;
55using System . Threading . Tasks ;
6+ using StackifyLib . Internal . Logs ;
7+ using StackifyLib . Models ;
8+ using StackifyLib . Utils ;
69
710namespace StackifyLib
811{
912 public class StackifyTraceListener : TraceListener
1013 {
14+ private StackifyLib . Internal . Logs . ILogClient _logClient = null ;
15+
16+ public StackifyTraceListener ( )
17+ {
18+ _logClient = new LogClient ( "StackifyLib.net-TraceListener" , null , null ) ;
19+ }
20+
21+
22+ private void WriteToStackify ( string level , string message )
23+ {
24+ try
25+ {
26+
27+ //make sure the buffer isn't overflowing
28+ //if it is skip since we can't do anything with the message
29+
30+ if ( Logger . PrefixEnabled ( ) || _logClient . CanQueue ( ) )
31+ {
32+
33+ LogMsg msg = new LogMsg ( ) ;
34+ msg . Msg = message ;
35+ msg . Level = level ;
36+
37+ }
38+ else
39+ {
40+ StackifyAPILogger . Log ( "Unable to send log because the queue is full" ) ;
41+ }
42+ }
43+ catch ( Exception ex )
44+ {
45+ StackifyAPILogger . Log ( ex . ToString ( ) ) ;
46+ }
47+
48+ }
49+
1150 public override void WriteLine ( object o , string category )
1251 {
1352 base . WriteLine ( o , category ) ;
1453 }
1554
1655 public override void WriteLine ( string message , string category )
1756 {
18- base . WriteLine ( message , category ) ;
57+ WriteToStackify ( "TRACE" , message ) ;
1958 }
2059
2160 public override void WriteLine ( object o )
@@ -25,22 +64,22 @@ public override void WriteLine(object o)
2564
2665 public override void Write ( string message )
2766 {
28- //ignore this
67+ WriteToStackify ( "TRACE" , message ) ;
2968 }
3069
3170 public override void WriteLine ( string message )
3271 {
33-
72+ WriteToStackify ( "TRACE" , message ) ;
3473 }
3574
3675 public override void Fail ( string message )
3776 {
38- base . Fail ( message ) ;
77+ WriteToStackify ( "FAIL" , message ) ;
3978 }
4079
4180 public override void Fail ( string message , string detailMessage )
4281 {
43- base . Fail ( message , detailMessage ) ;
82+ WriteToStackify ( "FAIL" , message ) ;
4483 }
4584
4685 public override void Flush ( )
@@ -50,6 +89,21 @@ public override void Flush()
5089
5190 protected override void Dispose ( bool disposing )
5291 {
92+ try
93+ {
94+ StackifyAPILogger . Log ( "TraceListener closing" ) ;
95+
96+ _logClient . Close ( ) ;
97+
98+ //This is to force the metrics queue to flush as well
99+ StackifyLib . Internal . Metrics . MetricClient . StopMetricsQueue ( "TraceListener OnClose" ) ;
100+ }
101+ catch
102+ {
103+
104+
105+ }
106+
53107 base . Dispose ( disposing ) ;
54108 }
55109 }
0 commit comments