1+ namespace NServiceBus . Testing . Tests . Logging
2+ {
3+ using System ;
4+ using System . IO ;
5+ using NServiceBus . Logging ;
6+ using NUnit . Framework ;
7+
8+ [ TestFixture ]
9+ public class LoggingTests
10+ {
11+ [ TearDown ]
12+ public void Teardown ( )
13+ {
14+ SomeClassThatUsesStaticLogger . Reset ( ) ;
15+ }
16+
17+ [ Test ]
18+ public void Scoped_Writer_should_be_honored ( )
19+ {
20+ var firstStringWriter = new StringWriter ( ) ;
21+ var loggerFactory = LogManager . Use < TestingLoggerFactory > ( ) ;
22+ using ( loggerFactory . BeginScope ( firstStringWriter ) )
23+ {
24+ var firstInstance = new SomeClassThatUsesStaticLogger ( ) ;
25+ firstInstance . DoSomething ( ) ;
26+ }
27+
28+ var secondStringWriter = new StringWriter ( ) ;
29+ using ( loggerFactory . BeginScope ( secondStringWriter ) )
30+ {
31+ var secondInstance = new SomeClassThatUsesStaticLogger ( ) ;
32+ secondInstance . DoSomething ( ) ;
33+ }
34+
35+ var firstLogString = firstStringWriter . ToString ( ) ;
36+ var secondLogString = secondStringWriter . ToString ( ) ;
37+
38+ Assert . AreNotEqual ( firstLogString , secondLogString ) ;
39+ StringAssert . Contains ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 0" , firstLogString ) ;
40+ StringAssert . DoesNotContain ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 1" , firstLogString ) ;
41+ StringAssert . Contains ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 1" , secondLogString ) ;
42+ StringAssert . DoesNotContain ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 0" , secondLogString ) ;
43+ }
44+
45+ [ Test ]
46+ public void Scoped_Loglevel_should_be_honored ( )
47+ {
48+ var firstStringWriter = new StringWriter ( ) ;
49+ var loggerFactory = LogManager . Use < TestingLoggerFactory > ( ) ;
50+ using ( loggerFactory . BeginScope ( firstStringWriter , LogLevel . Warn ) )
51+ {
52+ var firstInstance = new SomeClassThatUsesStaticLogger ( ) ;
53+ firstInstance . DoSomething ( ) ;
54+ }
55+
56+ var secondStringWriter = new StringWriter ( ) ;
57+ using ( loggerFactory . BeginScope ( secondStringWriter ) )
58+ {
59+ var secondInstance = new SomeClassThatUsesStaticLogger ( ) ;
60+ secondInstance . DoSomething ( ) ;
61+ }
62+
63+ var firstLogString = firstStringWriter . ToString ( ) ;
64+ var secondLogString = secondStringWriter . ToString ( ) ;
65+
66+ Assert . AreNotEqual ( firstLogString , secondLogString ) ;
67+ Assert . IsEmpty ( firstLogString ) ;
68+ StringAssert . Contains ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 1" , secondLogString ) ;
69+ }
70+
71+ [ Test ]
72+ public void Global_Writer_should_be_honored ( )
73+ {
74+ var loggerFactory = LogManager . Use < TestingLoggerFactory > ( ) ;
75+ var globalWriter = new StringWriter ( ) ;
76+ loggerFactory . WriteTo ( globalWriter ) ;
77+
78+ var firstInstance = new SomeClassThatUsesStaticLogger ( ) ;
79+ firstInstance . DoSomething ( ) ;
80+
81+ var secondStringWriter = new StringWriter ( ) ;
82+ using ( loggerFactory . BeginScope ( secondStringWriter ) )
83+ {
84+ var secondInstance = new SomeClassThatUsesStaticLogger ( ) ;
85+ secondInstance . DoSomething ( ) ;
86+ }
87+
88+ var globalLogString = globalWriter . ToString ( ) ;
89+ var scopedLogString = secondStringWriter . ToString ( ) ;
90+
91+ Assert . AreNotEqual ( globalLogString , scopedLogString ) ;
92+ StringAssert . Contains ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 0" , globalLogString ) ;
93+ StringAssert . DoesNotContain ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 1" , globalLogString ) ;
94+ StringAssert . Contains ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 1" , scopedLogString ) ;
95+ StringAssert . DoesNotContain ( "NServiceBus.Testing.Tests.Logging.LoggingTests+SomeClassThatUsesStaticLogger 0" , scopedLogString ) ;
96+ }
97+
98+ [ Test ]
99+ public void Scope_cannot_be_nested ( )
100+ {
101+ Assert . Throws < InvalidOperationException > ( ( ) =>
102+ {
103+ var loggerFactory = LogManager . Use < TestingLoggerFactory > ( ) ;
104+ using ( loggerFactory . BeginScope ( new StringWriter ( ) ) )
105+ using ( loggerFactory . BeginScope ( new StringWriter ( ) ) )
106+ {
107+ }
108+ } ) ;
109+ }
110+
111+ [ Test ]
112+ public void NoScope_does_work ( )
113+ {
114+ LogManager . Use < TestingLoggerFactory > ( ) ;
115+
116+ var secondInstance = new SomeClassThatUsesStaticLogger ( ) ;
117+ secondInstance . DoSomething ( ) ;
118+ }
119+
120+ class SomeClassThatUsesStaticLogger
121+ {
122+ public SomeClassThatUsesStaticLogger ( )
123+ {
124+ InstanceCounter = instanceCounter ++ ;
125+ }
126+
127+ public int InstanceCounter { get ; }
128+
129+ public void DoSomething ( )
130+ {
131+ Logger . Debug ( InstanceCounter . ToString ( ) ) ;
132+ }
133+
134+ public static void Reset ( )
135+ {
136+ instanceCounter = 0 ;
137+ }
138+
139+ static int instanceCounter ;
140+
141+ static ILog Logger = LogManager . GetLogger < SomeClassThatUsesStaticLogger > ( ) ;
142+ }
143+ }
144+ }
0 commit comments