LogConfigTextFileMaxSize.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using System.Xml;
  2. namespace Wayne.Lib.Log
  3. {
  4. /// <summary>
  5. /// Definition of a max size of a log file.
  6. /// </summary>
  7. public class LogConfigTextFileMaxSize
  8. {
  9. #region Properties
  10. /// <summary>
  11. /// Max bytes per file
  12. /// </summary>
  13. public long MaxSizePerFile { get; set; }
  14. /// <summary>
  15. /// Max number of files that are opened before it starts over with the first one.
  16. /// </summary>
  17. public int MaxFileCircleCount { get; set; }
  18. /// <summary>
  19. /// Maximum number of extra days to keep around. The number of days of logs is this number + 1 (always keep current day's logs)
  20. /// </summary>
  21. public int MaxDays { get; set; }
  22. /// <summary>
  23. /// Whether or not we try to clean up files left over that match prefix when instantiated, default is false
  24. /// </summary>
  25. public bool CleanOnStartup { get; set; }
  26. #endregion
  27. #region Construction
  28. /// <summary>
  29. /// Constructor
  30. /// </summary>
  31. /// <param name="maxSizePerFileMb"></param>
  32. public LogConfigTextFileMaxSize(long? maxSizePerFileMb)
  33. : this(maxSizePerFileMb, 1)
  34. {
  35. }
  36. /// <summary>
  37. /// Constructor
  38. /// </summary>
  39. /// <param name="maxSizePerFileMb"></param>
  40. /// <param name="maxFileCircleCount"></param>
  41. public LogConfigTextFileMaxSize(long? maxSizePerFileMb, int maxFileCircleCount)
  42. : this(maxSizePerFileMb, 1, 1, false)
  43. {
  44. }
  45. /// <summary>
  46. /// Constructor
  47. /// </summary>
  48. /// <param name="maxSizePerFileMb"></param>
  49. /// <param name="maxFileCircleCount"></param>
  50. /// <param name="maxDays"></param>
  51. /// <param name="cleanOnStartup"></param>
  52. public LogConfigTextFileMaxSize(long? maxSizePerFileMb, int maxFileCircleCount, int maxDays, bool cleanOnStartup)
  53. {
  54. if (maxSizePerFileMb.HasValue)
  55. MaxSizePerFile = maxSizePerFileMb.Value * 1024 * 1024; // Convert from megabytes to bytes.
  56. else
  57. MaxSizePerFile = long.MaxValue;
  58. MaxFileCircleCount = maxFileCircleCount;
  59. MaxDays = maxDays;
  60. CleanOnStartup = cleanOnStartup;
  61. }
  62. /// <summary>
  63. /// Deserialization constructor
  64. /// </summary>
  65. /// <param name="maxSizeElement"></param>
  66. internal LogConfigTextFileMaxSize(XmlNode maxSizeElement)
  67. {
  68. int? maxSizePerFileMb = null;
  69. // Default values when deserializing
  70. MaxSizePerFile = long.MaxValue;
  71. MaxFileCircleCount = 1;
  72. MaxDays = 7;
  73. CleanOnStartup = false;
  74. XmlAttribute maxSizePerFileMbAttribute = maxSizeElement.Attributes["MaxSizePerFileMb"];
  75. if ((maxSizePerFileMbAttribute != null) && (maxSizePerFileMbAttribute.Value != "unlimited"))
  76. maxSizePerFileMb = XmlConvert.ToInt32(maxSizePerFileMbAttribute.Value);
  77. else
  78. maxSizePerFileMb = null;
  79. if (maxSizePerFileMb.HasValue)
  80. MaxSizePerFile = maxSizePerFileMb.Value * 1024 * 1024; // Convert from megabytes to bytes.
  81. else
  82. MaxSizePerFile = long.MaxValue;
  83. XmlAttribute maxFileCircleCountAttribute = maxSizeElement.Attributes["MaxFileCircleCount"];
  84. if (maxFileCircleCountAttribute != null)
  85. MaxFileCircleCount = XmlConvert.ToInt32(maxFileCircleCountAttribute.Value);
  86. else
  87. MaxFileCircleCount = 1;
  88. XmlAttribute maxDaysAttribute = maxSizeElement.Attributes["MaxDays"];
  89. if (maxDaysAttribute != null)
  90. MaxDays = XmlConvert.ToInt32(maxDaysAttribute.Value);
  91. XmlAttribute cleanOnStartupAttribute = maxSizeElement.Attributes["CleanOnStartup"];
  92. if (cleanOnStartupAttribute != null)
  93. CleanOnStartup = XmlConvert.ToBoolean(cleanOnStartupAttribute.Value);
  94. }
  95. #endregion
  96. #region Methods
  97. /// <summary>
  98. /// Serialization.
  99. /// </summary>
  100. /// <param name="xmlWriter"></param>
  101. internal void WriteXml(XmlWriter xmlWriter)
  102. {
  103. xmlWriter.WriteStartElement("MaxSize");
  104. if (MaxSizePerFile == long.MaxValue)
  105. xmlWriter.WriteAttributeString("MaxSizePerFileMb", "unlimited");
  106. else
  107. xmlWriter.WriteAttributeString("MaxSizePerFileMb", XmlConvert.ToString(MaxSizePerFile / 1024 / 1024));
  108. if (MaxFileCircleCount > 1)
  109. xmlWriter.WriteAttributeString("MaxFileCircleCount", XmlConvert.ToString(MaxFileCircleCount));
  110. if (MaxDays > 0)
  111. xmlWriter.WriteAttributeString("MaxDays", XmlConvert.ToString(MaxDays));
  112. if (CleanOnStartup)
  113. xmlWriter.WriteAttributeString("CleanOnStartup", XmlConvert.ToString(CleanOnStartup));
  114. xmlWriter.WriteEndElement(); // MaxSize
  115. }
  116. #endregion
  117. }
  118. }