105 lines
3.8 KiB
C#
105 lines
3.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Xml;
|
|
using System.Xml.Serialization;
|
|
|
|
namespace AdvertsingProfitControl
|
|
{
|
|
internal class Logger
|
|
{
|
|
public static string LogFolderPath = Path.GetPathRoot(Environment.SystemDirectory) + @"Users\" + Environment.UserName + @"\AppData\Local\APC\";
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="date">Date and time of the event.</param>
|
|
/// <param name="source">The class or form name that generated the message.</param>
|
|
/// <param name="message">Log message.</param>
|
|
/// <param name="level">The log's level.</param>
|
|
/// <returns>A Log object to optionally store for later use by the calling code.</returns>
|
|
public static Log WriteLog(DateTime date, string source, string message, Level level)
|
|
{
|
|
var log = new Log
|
|
{
|
|
Date = date,
|
|
Level = level,
|
|
Message = message,
|
|
Source = source
|
|
};
|
|
//Check to see if the message level is a critical (0) error.
|
|
//If it is not then simply return the Log object to the calling code.
|
|
if (level == Level.Critical)
|
|
{
|
|
//If the message is critical then write it to disk and return the Log object created.
|
|
using (var file = new StreamWriter(LogFolderPath + DateTime.Now.ToString("yy-MM-dd") + ".log", true))
|
|
{
|
|
file.WriteLine(SerializeLog(log));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
using (var file = new StreamWriter(LogFolderPath + "information.log", true))
|
|
{
|
|
file.WriteLine(SerializeLog(log));
|
|
}
|
|
}
|
|
return log;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="logFilePath"></param>
|
|
/// <returns></returns>
|
|
public List<Log> ReadLogFile(string logFilePath = null)
|
|
{
|
|
var logs = new List<Log>();
|
|
//Check to see if a specific log file has been passed in.
|
|
if (logFilePath == null)
|
|
{
|
|
//If no specific log file has been passed then check to see if the
|
|
//default information log exists.
|
|
if (!File.Exists(LogFolderPath + "information.log"))
|
|
{
|
|
//If it doesn't then return an empty list.
|
|
return logs;
|
|
}
|
|
logFilePath = LogFolderPath + "information.log";
|
|
}
|
|
|
|
var myDeserializer = new XmlSerializer(typeof(List<Log>));
|
|
var myFileStream = new FileStream(logFilePath, FileMode.Open);
|
|
var stream = new StreamReader(myFileStream, Encoding.UTF8);
|
|
logs = (List<Log>)myDeserializer.Deserialize(stream);
|
|
myFileStream.Close();
|
|
|
|
return logs;
|
|
}
|
|
|
|
private static string SerializeLog(Log log)
|
|
{
|
|
var serializer = new XmlSerializer(typeof(Log));
|
|
string xml;
|
|
|
|
using (var sw = new StringWriter())
|
|
{
|
|
using (var writer = new XmlTextWriter(sw) {Formatting = Formatting.Indented})
|
|
{
|
|
writer.WriteStartElement("Log");
|
|
writer.WriteElementString("Date", log.Date.ToString("g"));
|
|
writer.WriteElementString("Level", log.Level.ToString());
|
|
writer.WriteElementString("Source", log.Source);
|
|
writer.WriteElementString("Message", log.Message);
|
|
writer.Close();
|
|
//serializer.Serialize(writer, log);
|
|
xml = sw.ToString();
|
|
}
|
|
}
|
|
|
|
return xml;
|
|
}
|
|
}
|
|
}
|