using System.Xml;
namespace Wayne.Lib.Log
{
///
/// Definition of a max size of a log file.
///
public class LogConfigTextFileMaxSize
{
#region Properties
///
/// Max bytes per file
///
public long MaxSizePerFile { get; set; }
///
/// Max number of files that are opened before it starts over with the first one.
///
public int MaxFileCircleCount { get; set; }
///
/// Maximum number of extra days to keep around. The number of days of logs is this number + 1 (always keep current day's logs)
///
public int MaxDays { get; set; }
///
/// Whether or not we try to clean up files left over that match prefix when instantiated, default is false
///
public bool CleanOnStartup { get; set; }
#endregion
#region Construction
///
/// Constructor
///
///
public LogConfigTextFileMaxSize(long? maxSizePerFileMb)
: this(maxSizePerFileMb, 1)
{
}
///
/// Constructor
///
///
///
public LogConfigTextFileMaxSize(long? maxSizePerFileMb, int maxFileCircleCount)
: this(maxSizePerFileMb, 1, 1, false)
{
}
///
/// Constructor
///
///
///
///
///
public LogConfigTextFileMaxSize(long? maxSizePerFileMb, int maxFileCircleCount, int maxDays, bool cleanOnStartup)
{
if (maxSizePerFileMb.HasValue)
MaxSizePerFile = maxSizePerFileMb.Value * 1024 * 1024; // Convert from megabytes to bytes.
else
MaxSizePerFile = long.MaxValue;
MaxFileCircleCount = maxFileCircleCount;
MaxDays = maxDays;
CleanOnStartup = cleanOnStartup;
}
///
/// Deserialization constructor
///
///
internal LogConfigTextFileMaxSize(XmlNode maxSizeElement)
{
int? maxSizePerFileMb = null;
// Default values when deserializing
MaxSizePerFile = long.MaxValue;
MaxFileCircleCount = 1;
MaxDays = 7;
CleanOnStartup = false;
XmlAttribute maxSizePerFileMbAttribute = maxSizeElement.Attributes["MaxSizePerFileMb"];
if ((maxSizePerFileMbAttribute != null) && (maxSizePerFileMbAttribute.Value != "unlimited"))
maxSizePerFileMb = XmlConvert.ToInt32(maxSizePerFileMbAttribute.Value);
else
maxSizePerFileMb = null;
if (maxSizePerFileMb.HasValue)
MaxSizePerFile = maxSizePerFileMb.Value * 1024 * 1024; // Convert from megabytes to bytes.
else
MaxSizePerFile = long.MaxValue;
XmlAttribute maxFileCircleCountAttribute = maxSizeElement.Attributes["MaxFileCircleCount"];
if (maxFileCircleCountAttribute != null)
MaxFileCircleCount = XmlConvert.ToInt32(maxFileCircleCountAttribute.Value);
else
MaxFileCircleCount = 1;
XmlAttribute maxDaysAttribute = maxSizeElement.Attributes["MaxDays"];
if (maxDaysAttribute != null)
MaxDays = XmlConvert.ToInt32(maxDaysAttribute.Value);
XmlAttribute cleanOnStartupAttribute = maxSizeElement.Attributes["CleanOnStartup"];
if (cleanOnStartupAttribute != null)
CleanOnStartup = XmlConvert.ToBoolean(cleanOnStartupAttribute.Value);
}
#endregion
#region Methods
///
/// Serialization.
///
///
internal void WriteXml(XmlWriter xmlWriter)
{
xmlWriter.WriteStartElement("MaxSize");
if (MaxSizePerFile == long.MaxValue)
xmlWriter.WriteAttributeString("MaxSizePerFileMb", "unlimited");
else
xmlWriter.WriteAttributeString("MaxSizePerFileMb", XmlConvert.ToString(MaxSizePerFile / 1024 / 1024));
if (MaxFileCircleCount > 1)
xmlWriter.WriteAttributeString("MaxFileCircleCount", XmlConvert.ToString(MaxFileCircleCount));
if (MaxDays > 0)
xmlWriter.WriteAttributeString("MaxDays", XmlConvert.ToString(MaxDays));
if (CleanOnStartup)
xmlWriter.WriteAttributeString("CleanOnStartup", XmlConvert.ToString(CleanOnStartup));
xmlWriter.WriteEndElement(); // MaxSize
}
#endregion
}
}