TextFileListener.cs
47 lines
| 1.4 KiB
| text/x-csharp
|
CSharpLexer
|
|
r40 | using System; | ||
| using System.IO; | ||||
| using System.Text; | ||||
| namespace Implab.Diagnostics { | ||||
|
|
r134 | public class TextFileListener: ListenerBase { | ||
|
|
r40 | readonly TextWriter m_textWriter; | ||
|
|
r205 | readonly object m_lock = new object(); | ||
|
|
r40 | |||
|
|
r134 | public TextFileListener(string fileName) { | ||
|
|
r40 | m_textWriter = File.CreateText(fileName); | ||
| m_textWriter.WriteLine("LOG {0}", DateTime.Now); | ||||
| } | ||||
|
|
r134 | #region implemented abstract members of ListenerBase | ||
| public override void Write(LogEventArgs args, object entry) { | ||||
|
|
r40 | var msg = new StringBuilder(); | ||
|
|
r134 | for (int i = 0; i < args.Operation.Level; i++) | ||
|
|
r40 | msg.Append(" "); | ||
|
|
r194 | msg.AppendFormat("[{0}]:{1}: {2}", args.ThreadId, args.Channel, entry); | ||
|
|
r40 | |||
|
|
r205 | lock (m_lock) { | ||
|
|
r40 | if (!IsDisposed) { | ||
|
|
r47 | // тут гарантировано еще не освобожден m_textWriter | ||
|
|
r92 | m_textWriter.WriteLine(msg); | ||
|
|
r40 | m_textWriter.Flush(); | ||
| } | ||||
| } | ||||
| } | ||||
|
|
r134 | #endregion | ||
|
|
r40 | protected override void Dispose(bool disposing) { | ||
| base.Dispose(disposing); | ||||
| if (disposing) { | ||||
|
|
r47 | // IsDisposed = true | ||
|
|
r205 | lock (m_lock) { | ||
|
|
r40 | Safe.Dispose(m_textWriter); | ||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
