using System; using System.IO; namespace ln.logging { public class FileLogger : LoggingBackend, IDisposable { FileStream fileStream; TextWriter writer; public FileLogger(string filename) { openLogFile(filename); } private void openLogFile(string filename) { if (File.Exists(filename)) { String oldfn = String.Format("{0}.old", filename); if (File.Exists(oldfn)) File.Delete(oldfn); File.Move(filename, oldfn); } fileStream = new FileStream(filename, FileMode.Create); writer = new StreamWriter(fileStream); } public void Close() { if (writer != null) { writer.Close(); fileStream.Close(); } } public void Dispose() { if (writer != null) { writer.Close(); writer.Dispose(); writer = null; } if (fileStream != null) { fileStream.Close(); fileStream.Dispose(); fileStream = null; } } protected override void MessageReceived(LogLevel logLevel, string[] lines) { if (writer == null) { throw new ObjectDisposedException("FileLogger has already been disposed"); } lock (writer) { foreach (String line in lines) { writer.WriteLine(line); writer.Flush(); } } } } }