2020-11-18 00:22:24 +01:00
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
namespace ln.logging
|
|
|
|
|
{
|
|
|
|
|
public class FileLogger : LoggingBackend, IDisposable
|
|
|
|
|
{
|
|
|
|
|
FileStream fileStream;
|
2020-11-27 19:53:07 +01:00
|
|
|
|
Stream foreignStream;
|
2020-11-18 00:22:24 +01:00
|
|
|
|
TextWriter writer;
|
|
|
|
|
|
|
|
|
|
public FileLogger(string filename)
|
|
|
|
|
{
|
|
|
|
|
openLogFile(filename);
|
|
|
|
|
}
|
2020-11-27 19:53:07 +01:00
|
|
|
|
public FileLogger(Stream stream)
|
|
|
|
|
{
|
|
|
|
|
foreignStream = stream;
|
|
|
|
|
writer = new StreamWriter(foreignStream);
|
|
|
|
|
}
|
2020-11-18 00:22:24 +01:00
|
|
|
|
|
|
|
|
|
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();
|
2020-11-27 19:53:07 +01:00
|
|
|
|
fileStream?.Close();
|
2020-11-18 00:22:24 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|