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 } }