TextFileListener.cs
47 lines
| 1.4 KiB
| text/x-csharp
|
CSharpLexer
cin
|
r40 | using System; | ||
using System.Collections.Generic; | ||||
using System.IO; | ||||
using System.Linq; | ||||
using System.Text; | ||||
namespace Implab.Diagnostics { | ||||
public class TextFileListener: TextListenerBase { | ||||
readonly TextWriter m_textWriter; | ||||
cin
|
r48 | public TextFileListener(string fileName, bool global) | ||
: base(global) { | ||||
cin
|
r40 | m_textWriter = File.CreateText(fileName); | ||
m_textWriter.WriteLine("LOG {0}", DateTime.Now); | ||||
Register(this); | ||||
} | ||||
cin
|
r48 | protected override void WriteEntry(TraceContext context, EventText text, string channel) { | ||
cin
|
r40 | var msg = new StringBuilder(); | ||
for (int i = 0; i < text.indent; i++) | ||||
msg.Append(" "); | ||||
cin
|
r48 | msg.AppendFormat("[{0}]:{1}: {2}", context.ThreadId, channel, text.content); | ||
cin
|
r40 | |||
lock (m_textWriter) { | ||||
if (!IsDisposed) { | ||||
cin
|
r47 | // тут гарантировано еще не освобожден m_textWriter | ||
cin
|
r40 | m_textWriter.WriteLine(msg.ToString()); | ||
m_textWriter.Flush(); | ||||
} | ||||
} | ||||
} | ||||
protected override void Dispose(bool disposing) { | ||||
base.Dispose(disposing); | ||||
if (disposing) { | ||||
cin
|
r47 | // IsDisposed = true | ||
cin
|
r40 | lock (m_textWriter) { | ||
Safe.Dispose(m_textWriter); | ||||
} | ||||
} | ||||
} | ||||
} | ||||
} | ||||