1 // ***********************************************************************
2 // Copyright (c) 2008-2013 Charlie Poole
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 // ***********************************************************************
25 #define NUNIT_FRAMEWORK
33 namespace NUnit.Engine.Internal
35 namespace NUnit.Framework.Internal
37 namespace NUnit.Common
41 /// Provides internal logging to the NUnit framework
43 public class Logger : ILogger
45 private readonly static string TIME_FMT = "HH:mm:ss.fff";
46 private readonly static string TRACE_FMT = "{0} {1,-5} [{2,2}] {3}: {4}";
49 private string fullname;
50 private InternalTraceLevel maxLevel;
51 private TextWriter writer;
54 /// Initializes a new instance of the <see cref="Logger"/> class.
56 /// <param name="name">The name.</param>
57 /// <param name="level">The log level.</param>
58 /// <param name="writer">The writer where logs are sent.</param>
59 public Logger(string name, InternalTraceLevel level, TextWriter writer)
61 this.maxLevel = level;
63 this.fullname = this.name = name;
64 int index = fullname.LastIndexOf('.');
66 this.name = fullname.Substring(index + 1);
71 /// Logs the message at error level.
73 /// <param name="message">The message.</param>
74 public void Error(string message)
76 Log(InternalTraceLevel.Error, message);
80 /// Logs the message at error level.
82 /// <param name="message">The message.</param>
83 /// <param name="args">The message arguments.</param>
84 public void Error(string message, params object[] args)
86 Log(InternalTraceLevel.Error, message, args);
89 //public void Error(string message, Exception ex)
91 // if (service.Level >= InternalTraceLevel.Error)
93 // service.Log(InternalTraceLevel.Error, message, name, ex);
100 /// Logs the message at warm level.
102 /// <param name="message">The message.</param>
103 public void Warning(string message)
105 Log(InternalTraceLevel.Warning, message);
109 /// Logs the message at warning level.
111 /// <param name="message">The message.</param>
112 /// <param name="args">The message arguments.</param>
113 public void Warning(string message, params object[] args)
115 Log(InternalTraceLevel.Warning, message, args);
121 /// Logs the message at info level.
123 /// <param name="message">The message.</param>
124 public void Info(string message)
126 Log(InternalTraceLevel.Info, message);
130 /// Logs the message at info level.
132 /// <param name="message">The message.</param>
133 /// <param name="args">The message arguments.</param>
134 public void Info(string message, params object[] args)
136 Log(InternalTraceLevel.Info, message, args);
142 /// Logs the message at debug level.
144 /// <param name="message">The message.</param>
145 public void Debug(string message)
147 Log(InternalTraceLevel.Verbose, message);
151 /// Logs the message at debug level.
153 /// <param name="message">The message.</param>
154 /// <param name="args">The message arguments.</param>
155 public void Debug(string message, params object[] args)
157 Log(InternalTraceLevel.Verbose, message, args);
161 #region Helper Methods
162 private void Log(InternalTraceLevel level, string message)
164 if (writer != null && this.maxLevel >= level)
165 WriteLog(level, message);
168 private void Log(InternalTraceLevel level, string format, params object[] args)
170 if (this.maxLevel >= level)
171 WriteLog(level, string.Format( format, args ) );
174 private void WriteLog(InternalTraceLevel level, string message)
176 writer.WriteLine(TRACE_FMT,
177 DateTime.Now.ToString(TIME_FMT),
178 level == InternalTraceLevel.Verbose ? "Debug" : level.ToString(),
180 System.Environment.CurrentManagedThreadId,
182 System.Threading.Thread.CurrentThread.ManagedThreadId,