1 #region Copyright & License
2 //
3 // Copyright 2006 The Apache Software Foundation
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 #endregion
18 
19 using System;
20 using System.IO;
21 
22 using log4net.Config;
23 using log4net.Layout;
24 using log4net.Core;
25 using log4net.Repository;
26 using log4net.Tests.Appender;
27 using log4net.Util;
28 using NUnit.Framework;
29 
30 namespace log4net.Tests.Core
31 {
32 	/// <summary>
33 	/// Used for internal unit testing the <see cref="PatternLayoutTest"/> class.
34 	/// </summary>
35 	/// <remarks>
36 	/// Used for internal unit testing the <see cref="PatternLayoutTest"/> class.
37 	/// </remarks>
38 	[TestFixture] public class StringFormatTest
39 	{
TestFormatString()40 		[Test] public void TestFormatString()
41 		{
42 			StringAppender stringAppender = new StringAppender();
43 			stringAppender.Layout = new PatternLayout("%message");
44 
45 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
46 			BasicConfigurator.Configure(rep, stringAppender);
47 
48 			ILog log1 = LogManager.GetLogger(rep.Name, "TestFormatString");
49 
50 			// ***
51 			log1.Info("TestMessage");
52 			Assert.AreEqual("TestMessage", stringAppender.GetString(), "Test simple INFO event");
53 			stringAppender.Reset();
54 
55 
56 			// ***
57 			log1.DebugFormat("Before {0} After", "Middle");
58 			Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted DEBUG event");
59 			stringAppender.Reset();
60 
61 			// ***
62 			log1.InfoFormat("Before {0} After", "Middle");
63 			Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted INFO event");
64 			stringAppender.Reset();
65 
66 			// ***
67 			log1.WarnFormat("Before {0} After", "Middle");
68 			Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted WARN event");
69 			stringAppender.Reset();
70 
71 			// ***
72 			log1.ErrorFormat("Before {0} After", "Middle");
73 			Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted ERROR event");
74 			stringAppender.Reset();
75 
76 			// ***
77 			log1.FatalFormat("Before {0} After", "Middle");
78 			Assert.AreEqual("Before Middle After", stringAppender.GetString(), "Test simple formatted FATAL event");
79 			stringAppender.Reset();
80 
81 
82 			// ***
83 			log1.InfoFormat("Before {0} After {1}", "Middle", "End");
84 			Assert.AreEqual("Before Middle After End", stringAppender.GetString(), "Test simple formatted INFO event 2");
85 			stringAppender.Reset();
86 
87 			// ***
88 			log1.InfoFormat("IGNORE THIS WARNING - EXCEPTION EXPECTED Before {0} After {1} {2}", "Middle", "End");
89 			Assert.AreEqual(STRING_FORMAT_ERROR, stringAppender.GetString(), "Test formatting error");
90 			stringAppender.Reset();
91 		}
92 
93 		private const string STRING_FORMAT_ERROR = "<log4net.Error>Exception during StringFormat: Index (zero based) must be greater than or equal to zero and less than the size of the argument list. <format>IGNORE THIS WARNING - EXCEPTION EXPECTED Before {0} After {1} {2}</format><args>{Middle, End}</args></log4net.Error>";
94 
95 
TestLogFormatApi_Debug()96 		[Test] public void TestLogFormatApi_Debug()
97 		{
98 			StringAppender stringAppender = new StringAppender();
99 			stringAppender.Layout = new PatternLayout("%level:%message");
100 
101 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
102 			BasicConfigurator.Configure(rep, stringAppender);
103 
104 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Debug");
105 
106 			// ***
107 			log1.Debug("TestMessage");
108 			Assert.AreEqual("DEBUG:TestMessage", stringAppender.GetString(), "Test simple DEBUG event 1");
109 			stringAppender.Reset();
110 
111 			// ***
112 			log1.Debug("TestMessage", null);
113 			Assert.AreEqual("DEBUG:TestMessage", stringAppender.GetString(), "Test simple DEBUG event 2");
114 			stringAppender.Reset();
115 
116 			// ***
117 			log1.Debug("TestMessage", new Exception("Exception message"));
118 			Assert.AreEqual("DEBUG:TestMessageSystem.Exception: Exception message\r\n", stringAppender.GetString(), "Test simple DEBUG event 3");
119 			stringAppender.Reset();
120 
121 			// ***
122 			log1.DebugFormat("a{0}", "1");
123 			Assert.AreEqual("DEBUG:a1", stringAppender.GetString(), "Test formatted DEBUG event with 1 parm");
124 			stringAppender.Reset();
125 
126 			// ***
127 			log1.DebugFormat("a{0}b{1}", "1", "2");
128 			Assert.AreEqual("DEBUG:a1b2", stringAppender.GetString(), "Test formatted DEBUG event with 2 parm");
129 			stringAppender.Reset();
130 
131 			// ***
132 			log1.DebugFormat("a{0}b{1}c{2}", "1", "2", "3");
133 			Assert.AreEqual("DEBUG:a1b2c3", stringAppender.GetString(), "Test formatted DEBUG event with 3 parm");
134 			stringAppender.Reset();
135 
136 
137 			// ***
138 			log1.DebugFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
139 			Assert.AreEqual("DEBUG:aQbWcEdReTf", stringAppender.GetString(), "Test formatted DEBUG event with 5 parms (only 4 used)");
140 			stringAppender.Reset();
141 
142 			// ***
143 			log1.DebugFormat(null, "Before {0} After {1}", "Middle", "End");
144 			Assert.AreEqual("DEBUG:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
145 			stringAppender.Reset();
146 
147 			// ***
148 			log1.DebugFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
149 			Assert.AreEqual("DEBUG:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
150 			stringAppender.Reset();
151 		}
TestLogFormatApi_NoDebug()152 		[Test] public void TestLogFormatApi_NoDebug()
153 		{
154 			StringAppender stringAppender = new StringAppender();
155 			stringAppender.Threshold = Level.Info;
156 			stringAppender.Layout = new PatternLayout("%level:%message");
157 
158 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
159 			BasicConfigurator.Configure(rep, stringAppender);
160 
161 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Debug");
162 
163 			// ***
164 			log1.Debug("TestMessage");
165 			Assert.AreEqual("", stringAppender.GetString(), "Test simple DEBUG event 1");
166 			stringAppender.Reset();
167 
168 			// ***
169 			log1.Debug("TestMessage", null);
170 			Assert.AreEqual("", stringAppender.GetString(), "Test simple DEBUG event 2");
171 			stringAppender.Reset();
172 
173 			// ***
174 			log1.Debug("TestMessage", new Exception("Exception message"));
175 			Assert.AreEqual("", stringAppender.GetString(), "Test simple DEBUG event 3");
176 			stringAppender.Reset();
177 
178 			// ***
179 			log1.DebugFormat("a{0}", "1");
180 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 1 parm");
181 			stringAppender.Reset();
182 
183 			// ***
184 			log1.DebugFormat("a{0}b{1}", "1", "2");
185 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 2 parm");
186 			stringAppender.Reset();
187 
188 			// ***
189 			log1.DebugFormat("a{0}b{1}c{2}", "1", "2", "3");
190 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 3 parm");
191 			stringAppender.Reset();
192 
193 
194 			// ***
195 			log1.DebugFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
196 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted DEBUG event with 5 parms (only 4 used)");
197 			stringAppender.Reset();
198 
199 			// ***
200 			log1.DebugFormat(null, "Before {0} After {1}", "Middle", "End");
201 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
202 			stringAppender.Reset();
203 
204 			// ***
205 			log1.DebugFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
206 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
207 			stringAppender.Reset();
208 		}
209 
210 
TestLogFormatApi_Info()211 		[Test] public void TestLogFormatApi_Info()
212 		{
213 			StringAppender stringAppender = new StringAppender();
214 			stringAppender.Layout = new PatternLayout("%level:%message");
215 
216 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
217 			BasicConfigurator.Configure(rep, stringAppender);
218 
219 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Info");
220 
221 			// ***
222 			log1.Info("TestMessage");
223 			Assert.AreEqual("INFO:TestMessage", stringAppender.GetString(), "Test simple INFO event 1");
224 			stringAppender.Reset();
225 
226 			// ***
227 			log1.Info("TestMessage", null);
228 			Assert.AreEqual("INFO:TestMessage", stringAppender.GetString(), "Test simple INFO event 2");
229 			stringAppender.Reset();
230 
231 			// ***
232 			log1.Info("TestMessage", new Exception("Exception message"));
233 			Assert.AreEqual("INFO:TestMessageSystem.Exception: Exception message\r\n", stringAppender.GetString(), "Test simple INFO event 3");
234 			stringAppender.Reset();
235 
236 			// ***
237 			log1.InfoFormat("a{0}", "1");
238 			Assert.AreEqual("INFO:a1", stringAppender.GetString(), "Test formatted INFO event with 1 parm");
239 			stringAppender.Reset();
240 
241 			// ***
242 			log1.InfoFormat("a{0}b{1}", "1", "2");
243 			Assert.AreEqual("INFO:a1b2", stringAppender.GetString(), "Test formatted INFO event with 2 parm");
244 			stringAppender.Reset();
245 
246 			// ***
247 			log1.InfoFormat("a{0}b{1}c{2}", "1", "2", "3");
248 			Assert.AreEqual("INFO:a1b2c3", stringAppender.GetString(), "Test formatted INFO event with 3 parm");
249 			stringAppender.Reset();
250 
251 
252 			// ***
253 			log1.InfoFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
254 			Assert.AreEqual("INFO:aQbWcEdReTf", stringAppender.GetString(), "Test formatted INFO event with 5 parms (only 4 used)");
255 			stringAppender.Reset();
256 
257 			// ***
258 			log1.InfoFormat(null, "Before {0} After {1}", "Middle", "End");
259 			Assert.AreEqual("INFO:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
260 			stringAppender.Reset();
261 
262 			// ***
263 			log1.InfoFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
264 			Assert.AreEqual("INFO:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
265 			stringAppender.Reset();
266 		}
TestLogFormatApi_NoInfo()267 		[Test] public void TestLogFormatApi_NoInfo()
268 		{
269 			StringAppender stringAppender = new StringAppender();
270 			stringAppender.Threshold = Level.Warn;
271 			stringAppender.Layout = new PatternLayout("%level:%message");
272 
273 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
274 			BasicConfigurator.Configure(rep, stringAppender);
275 
276 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Info");
277 
278 			// ***
279 			log1.Info("TestMessage");
280 			Assert.AreEqual("", stringAppender.GetString(), "Test simple INFO event 1");
281 			stringAppender.Reset();
282 
283 			// ***
284 			log1.Info("TestMessage", null);
285 			Assert.AreEqual("", stringAppender.GetString(), "Test simple INFO event 2");
286 			stringAppender.Reset();
287 
288 			// ***
289 			log1.Info("TestMessage", new Exception("Exception message"));
290 			Assert.AreEqual("", stringAppender.GetString(), "Test simple INFO event 3");
291 			stringAppender.Reset();
292 
293 			// ***
294 			log1.InfoFormat("a{0}", "1");
295 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 1 parm");
296 			stringAppender.Reset();
297 
298 			// ***
299 			log1.InfoFormat("a{0}b{1}", "1", "2");
300 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 2 parm");
301 			stringAppender.Reset();
302 
303 			// ***
304 			log1.InfoFormat("a{0}b{1}c{2}", "1", "2", "3");
305 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 3 parm");
306 			stringAppender.Reset();
307 
308 
309 			// ***
310 			log1.InfoFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
311 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted INFO event with 5 parms (only 4 used)");
312 			stringAppender.Reset();
313 
314 			// ***
315 			log1.InfoFormat(null, "Before {0} After {1}", "Middle", "End");
316 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
317 			stringAppender.Reset();
318 
319 			// ***
320 			log1.InfoFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
321 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
322 			stringAppender.Reset();
323 		}
324 
325 
TestLogFormatApi_Warn()326 		[Test] public void TestLogFormatApi_Warn()
327 		{
328 			StringAppender stringAppender = new StringAppender();
329 			stringAppender.Layout = new PatternLayout("%level:%message");
330 
331 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
332 			BasicConfigurator.Configure(rep, stringAppender);
333 
334 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Warn");
335 
336 			// ***
337 			log1.Warn("TestMessage");
338 			Assert.AreEqual("WARN:TestMessage", stringAppender.GetString(), "Test simple WARN event 1");
339 			stringAppender.Reset();
340 
341 			// ***
342 			log1.Warn("TestMessage", null);
343 			Assert.AreEqual("WARN:TestMessage", stringAppender.GetString(), "Test simple WARN event 2");
344 			stringAppender.Reset();
345 
346 			// ***
347 			log1.Warn("TestMessage", new Exception("Exception message"));
348 			Assert.AreEqual("WARN:TestMessageSystem.Exception: Exception message\r\n", stringAppender.GetString(), "Test simple WARN event 3");
349 			stringAppender.Reset();
350 
351 			// ***
352 			log1.WarnFormat("a{0}", "1");
353 			Assert.AreEqual("WARN:a1", stringAppender.GetString(), "Test formatted WARN event with 1 parm");
354 			stringAppender.Reset();
355 
356 			// ***
357 			log1.WarnFormat("a{0}b{1}", "1", "2");
358 			Assert.AreEqual("WARN:a1b2", stringAppender.GetString(), "Test formatted WARN event with 2 parm");
359 			stringAppender.Reset();
360 
361 			// ***
362 			log1.WarnFormat("a{0}b{1}c{2}", "1", "2", "3");
363 			Assert.AreEqual("WARN:a1b2c3", stringAppender.GetString(), "Test formatted WARN event with 3 parm");
364 			stringAppender.Reset();
365 
366 
367 			// ***
368 			log1.WarnFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
369 			Assert.AreEqual("WARN:aQbWcEdReTf", stringAppender.GetString(), "Test formatted WARN event with 5 parms (only 4 used)");
370 			stringAppender.Reset();
371 
372 			// ***
373 			log1.WarnFormat(null, "Before {0} After {1}", "Middle", "End");
374 			Assert.AreEqual("WARN:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
375 			stringAppender.Reset();
376 
377 			// ***
378 			log1.WarnFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
379 			Assert.AreEqual("WARN:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
380 			stringAppender.Reset();
381 		}
TestLogFormatApi_NoWarn()382 		[Test] public void TestLogFormatApi_NoWarn()
383 		{
384 			StringAppender stringAppender = new StringAppender();
385 			stringAppender.Threshold = Level.Error;
386 			stringAppender.Layout = new PatternLayout("%level:%message");
387 
388 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
389 			BasicConfigurator.Configure(rep, stringAppender);
390 
391 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Warn");
392 
393 			// ***
394 			log1.Warn("TestMessage");
395 			Assert.AreEqual("", stringAppender.GetString(), "Test simple WARN event 1");
396 			stringAppender.Reset();
397 
398 			// ***
399 			log1.Warn("TestMessage", null);
400 			Assert.AreEqual("", stringAppender.GetString(), "Test simple WARN event 2");
401 			stringAppender.Reset();
402 
403 			// ***
404 			log1.Warn("TestMessage", new Exception("Exception message"));
405 			Assert.AreEqual("", stringAppender.GetString(), "Test simple WARN event 3");
406 			stringAppender.Reset();
407 
408 			// ***
409 			log1.WarnFormat("a{0}", "1");
410 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 1 parm");
411 			stringAppender.Reset();
412 
413 			// ***
414 			log1.WarnFormat("a{0}b{1}", "1", "2");
415 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 2 parm");
416 			stringAppender.Reset();
417 
418 			// ***
419 			log1.WarnFormat("a{0}b{1}c{2}", "1", "2", "3");
420 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 3 parm");
421 			stringAppender.Reset();
422 
423 
424 			// ***
425 			log1.WarnFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
426 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted WARN event with 5 parms (only 4 used)");
427 			stringAppender.Reset();
428 
429 			// ***
430 			log1.WarnFormat(null, "Before {0} After {1}", "Middle", "End");
431 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
432 			stringAppender.Reset();
433 
434 			// ***
435 			log1.WarnFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
436 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
437 			stringAppender.Reset();
438 		}
439 
440 
TestLogFormatApi_Error()441 		[Test] public void TestLogFormatApi_Error()
442 		{
443 			StringAppender stringAppender = new StringAppender();
444 			stringAppender.Layout = new PatternLayout("%level:%message");
445 
446 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
447 			BasicConfigurator.Configure(rep, stringAppender);
448 
449 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Error");
450 
451 			// ***
452 			log1.Error("TestMessage");
453 			Assert.AreEqual("ERROR:TestMessage", stringAppender.GetString(), "Test simple ERROR event 1");
454 			stringAppender.Reset();
455 
456 			// ***
457 			log1.Error("TestMessage", null);
458 			Assert.AreEqual("ERROR:TestMessage", stringAppender.GetString(), "Test simple ERROR event 2");
459 			stringAppender.Reset();
460 
461 			// ***
462 			log1.Error("TestMessage", new Exception("Exception message"));
463 			Assert.AreEqual("ERROR:TestMessageSystem.Exception: Exception message\r\n", stringAppender.GetString(), "Test simple ERROR event 3");
464 			stringAppender.Reset();
465 
466 			// ***
467 			log1.ErrorFormat("a{0}", "1");
468 			Assert.AreEqual("ERROR:a1", stringAppender.GetString(), "Test formatted ERROR event with 1 parm");
469 			stringAppender.Reset();
470 
471 			// ***
472 			log1.ErrorFormat("a{0}b{1}", "1", "2");
473 			Assert.AreEqual("ERROR:a1b2", stringAppender.GetString(), "Test formatted ERROR event with 2 parm");
474 			stringAppender.Reset();
475 
476 			// ***
477 			log1.ErrorFormat("a{0}b{1}c{2}", "1", "2", "3");
478 			Assert.AreEqual("ERROR:a1b2c3", stringAppender.GetString(), "Test formatted ERROR event with 3 parm");
479 			stringAppender.Reset();
480 
481 
482 			// ***
483 			log1.ErrorFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
484 			Assert.AreEqual("ERROR:aQbWcEdReTf", stringAppender.GetString(), "Test formatted ERROR event with 5 parms (only 4 used)");
485 			stringAppender.Reset();
486 
487 			// ***
488 			log1.ErrorFormat(null, "Before {0} After {1}", "Middle", "End");
489 			Assert.AreEqual("ERROR:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
490 			stringAppender.Reset();
491 
492 			// ***
493 			log1.ErrorFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
494 			Assert.AreEqual("ERROR:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
495 			stringAppender.Reset();
496 		}
TestLogFormatApi_NoError()497 		[Test] public void TestLogFormatApi_NoError()
498 		{
499 			StringAppender stringAppender = new StringAppender();
500 			stringAppender.Threshold = Level.Fatal;
501 			stringAppender.Layout = new PatternLayout("%level:%message");
502 
503 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
504 			BasicConfigurator.Configure(rep, stringAppender);
505 
506 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Error");
507 
508 			// ***
509 			log1.Error("TestMessage");
510 			Assert.AreEqual("", stringAppender.GetString(), "Test simple ERROR event 1");
511 			stringAppender.Reset();
512 
513 			// ***
514 			log1.Error("TestMessage", null);
515 			Assert.AreEqual("", stringAppender.GetString(), "Test simple ERROR event 2");
516 			stringAppender.Reset();
517 
518 			// ***
519 			log1.Error("TestMessage", new Exception("Exception message"));
520 			Assert.AreEqual("", stringAppender.GetString(), "Test simple ERROR event 3");
521 			stringAppender.Reset();
522 
523 			// ***
524 			log1.ErrorFormat("a{0}", "1");
525 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 1 parm");
526 			stringAppender.Reset();
527 
528 			// ***
529 			log1.ErrorFormat("a{0}b{1}", "1", "2");
530 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 2 parm");
531 			stringAppender.Reset();
532 
533 			// ***
534 			log1.ErrorFormat("a{0}b{1}c{2}", "1", "2", "3");
535 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 3 parm");
536 			stringAppender.Reset();
537 
538 
539 			// ***
540 			log1.ErrorFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
541 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted ERROR event with 5 parms (only 4 used)");
542 			stringAppender.Reset();
543 
544 			// ***
545 			log1.ErrorFormat(null, "Before {0} After {1}", "Middle", "End");
546 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
547 			stringAppender.Reset();
548 
549 			// ***
550 			log1.ErrorFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
551 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
552 			stringAppender.Reset();
553 		}
554 
555 
TestLogFormatApi_Fatal()556 		[Test] public void TestLogFormatApi_Fatal()
557 		{
558 			StringAppender stringAppender = new StringAppender();
559 			stringAppender.Layout = new PatternLayout("%level:%message");
560 
561 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
562 			BasicConfigurator.Configure(rep, stringAppender);
563 
564 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Fatal");
565 
566 			// ***
567 			log1.Fatal("TestMessage");
568 			Assert.AreEqual("FATAL:TestMessage", stringAppender.GetString(), "Test simple FATAL event 1");
569 			stringAppender.Reset();
570 
571 			// ***
572 			log1.Fatal("TestMessage", null);
573 			Assert.AreEqual("FATAL:TestMessage", stringAppender.GetString(), "Test simple FATAL event 2");
574 			stringAppender.Reset();
575 
576 			// ***
577 			log1.Fatal("TestMessage", new Exception("Exception message"));
578 			Assert.AreEqual("FATAL:TestMessageSystem.Exception: Exception message\r\n", stringAppender.GetString(), "Test simple FATAL event 3");
579 			stringAppender.Reset();
580 
581 			// ***
582 			log1.FatalFormat("a{0}", "1");
583 			Assert.AreEqual("FATAL:a1", stringAppender.GetString(), "Test formatted FATAL event with 1 parm");
584 			stringAppender.Reset();
585 
586 			// ***
587 			log1.FatalFormat("a{0}b{1}", "1", "2");
588 			Assert.AreEqual("FATAL:a1b2", stringAppender.GetString(), "Test formatted FATAL event with 2 parm");
589 			stringAppender.Reset();
590 
591 			// ***
592 			log1.FatalFormat("a{0}b{1}c{2}", "1", "2", "3");
593 			Assert.AreEqual("FATAL:a1b2c3", stringAppender.GetString(), "Test formatted FATAL event with 3 parm");
594 			stringAppender.Reset();
595 
596 
597 			// ***
598 			log1.FatalFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
599 			Assert.AreEqual("FATAL:aQbWcEdReTf", stringAppender.GetString(), "Test formatted FATAL event with 5 parms (only 4 used)");
600 			stringAppender.Reset();
601 
602 			// ***
603 			log1.FatalFormat(null, "Before {0} After {1}", "Middle", "End");
604 			Assert.AreEqual("FATAL:Before Middle After End", stringAppender.GetString(), "Test formatting with null provider");
605 			stringAppender.Reset();
606 
607 			// ***
608 			log1.FatalFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
609 			Assert.AreEqual("FATAL:Before Middle After End", stringAppender.GetString(), "Test formatting with 'en' provider");
610 			stringAppender.Reset();
611 		}
TestLogFormatApi_NoFatal()612 		[Test] public void TestLogFormatApi_NoFatal()
613 		{
614 			StringAppender stringAppender = new StringAppender();
615 			stringAppender.Threshold = Level.Off;
616 			stringAppender.Layout = new PatternLayout("%level:%message");
617 
618 			ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
619 			BasicConfigurator.Configure(rep, stringAppender);
620 
621 			ILog log1 = LogManager.GetLogger(rep.Name, "TestLogFormatApi_Fatal");
622 
623 			// ***
624 			log1.Fatal("TestMessage");
625 			Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 1");
626 			stringAppender.Reset();
627 
628 			// ***
629 			log1.Fatal("TestMessage", null);
630 			Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 2");
631 			stringAppender.Reset();
632 
633 			// ***
634 			log1.Fatal("TestMessage", new Exception("Exception message"));
635 			Assert.AreEqual("", stringAppender.GetString(), "Test simple FATAL event 3");
636 			stringAppender.Reset();
637 
638 			// ***
639 			log1.FatalFormat("a{0}", "1");
640 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 1 parm");
641 			stringAppender.Reset();
642 
643 			// ***
644 			log1.FatalFormat("a{0}b{1}", "1", "2");
645 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 2 parm");
646 			stringAppender.Reset();
647 
648 			// ***
649 			log1.FatalFormat("a{0}b{1}c{2}", "1", "2", "3");
650 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 3 parm");
651 			stringAppender.Reset();
652 
653 
654 			// ***
655 			log1.FatalFormat("a{0}b{1}c{2}d{3}e{4}f", "Q", "W", "E", "R", "T", "Y");
656 			Assert.AreEqual("", stringAppender.GetString(), "Test formatted FATAL event with 5 parms (only 4 used)");
657 			stringAppender.Reset();
658 
659 			// ***
660 			log1.FatalFormat(null, "Before {0} After {1}", "Middle", "End");
661 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with null provider");
662 			stringAppender.Reset();
663 
664 			// ***
665 			log1.FatalFormat(new System.Globalization.CultureInfo("en"), "Before {0} After {1}", "Middle", "End");
666 			Assert.AreEqual("", stringAppender.GetString(), "Test formatting with 'en' provider");
667 			stringAppender.Reset();
668 		}
669 	}
670 }
671