LogConfigExternalLogWriterOutput.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Xml;
  4. namespace Wayne.Lib.Log
  5. {
  6. /// <summary>
  7. /// External logwriter output definition
  8. /// </summary>
  9. public class LogConfigExternalLogWriterOutput : LogConfigOutput
  10. {
  11. private string dateTimeFormat;
  12. /// <summary>
  13. /// Parameters as key/value pairs.
  14. /// </summary>
  15. public readonly Dictionary<string, string> Params = new Dictionary<string, string>();
  16. /// <summary>
  17. /// Log type of the external logger
  18. /// </summary>
  19. public string ExternalLogType { get; set; }
  20. /// <summary>
  21. /// Name of the external logger.
  22. /// </summary>
  23. public string ExternalLogName { get; set; }
  24. /// <summary>
  25. /// DateTime format to use
  26. /// </summary>
  27. public string DateTimeFormat
  28. {
  29. get { return dateTimeFormat; }
  30. set
  31. {
  32. dateTimeFormat = value;
  33. isDefaultDateTimeFormat = (dateTimeFormat == null);
  34. if (isDefaultDateTimeFormat)
  35. dateTimeFormat = Logger.DefaultDateTimeFormat;
  36. }
  37. }
  38. /// <summary>
  39. /// How to log the entity
  40. /// </summary>
  41. public EntityLogKind EntityLogKind { get; set; }
  42. /// <summary>
  43. /// Should the category be suppressed.
  44. /// </summary>
  45. public bool SuppressCategory { get; set; }
  46. private bool isDefaultDateTimeFormat;
  47. internal const string XmlType = "ExternalLogWriter";
  48. /// <summary>
  49. /// Constructor
  50. /// </summary>
  51. public LogConfigExternalLogWriterOutput()
  52. {
  53. DateTimeFormat = null; // To make it default date time format.
  54. }
  55. /// <summary>
  56. /// Constructor
  57. /// </summary>
  58. /// <param name="externalLogType"></param>
  59. /// <param name="externalLogName"></param>
  60. /// <param name="dateTimeFormat"></param>
  61. /// <param name="entityLogKind"></param>
  62. /// <param name="suppressCategory"></param>
  63. public LogConfigExternalLogWriterOutput(string externalLogType, string externalLogName, string dateTimeFormat, EntityLogKind entityLogKind, bool suppressCategory)
  64. {
  65. ExternalLogType = externalLogType;
  66. ExternalLogName = externalLogName;
  67. DateTimeFormat = dateTimeFormat;
  68. EntityLogKind = entityLogKind;
  69. SuppressCategory = suppressCategory;
  70. }
  71. /// <summary>
  72. /// Deserialization constructor
  73. /// </summary>
  74. /// <param name="parametersNode"></param>
  75. /// <param name="ns"></param>
  76. internal LogConfigExternalLogWriterOutput(XmlNode parametersNode, string ns)
  77. {
  78. XmlNode externalLogWriterParamsNode = parametersNode["ExternalLogWriterParams", ns];
  79. XmlAttribute externalLogTypeAttribute = externalLogWriterParamsNode.Attributes["ExternalLogType"];
  80. XmlAttribute externalLogNameAttribute = externalLogWriterParamsNode.Attributes["ExternalLogName"];
  81. ExternalLogType = externalLogTypeAttribute.Value;
  82. ExternalLogName = externalLogNameAttribute.Value;
  83. XmlAttribute dateTimeLogFormatAttribute = externalLogWriterParamsNode.Attributes["DateTimeLogFormat"];
  84. isDefaultDateTimeFormat = (dateTimeLogFormatAttribute == null);
  85. if (dateTimeLogFormatAttribute != null)
  86. DateTimeFormat = dateTimeLogFormatAttribute.Value;
  87. else
  88. DateTimeFormat = Logger.DefaultDateTimeFormat;
  89. XmlAttribute entityLogAttribute = externalLogWriterParamsNode.Attributes["EntityLog"];
  90. if (entityLogAttribute != null)
  91. EntityLogKind = (EntityLogKind)Enum.Parse(typeof(EntityLogKind), entityLogAttribute.Value, false);
  92. else
  93. EntityLogKind = EntityLogKind.Entity;
  94. XmlAttribute suppressCategoryAttribute = externalLogWriterParamsNode.Attributes["SuppressCategory"];
  95. if (suppressCategoryAttribute != null)
  96. SuppressCategory = XmlConvert.ToBoolean(suppressCategoryAttribute.Value);
  97. else
  98. SuppressCategory = false;
  99. }
  100. /// <summary>
  101. /// Serialization
  102. /// </summary>
  103. /// <param name="xmlWriter"></param>
  104. internal override void WriteXml(XmlWriter xmlWriter)
  105. {
  106. xmlWriter.WriteStartElement("Output");
  107. xmlWriter.WriteAttributeString("Type", XmlType);
  108. xmlWriter.WriteStartElement("Parameters");
  109. xmlWriter.WriteStartElement("ExternalLogWriterParams");
  110. xmlWriter.WriteAttributeString("ExternalLogType", ExternalLogType ?? string.Empty);
  111. xmlWriter.WriteAttributeString("ExternalLogName", ExternalLogName ?? string.Empty);
  112. if (!isDefaultDateTimeFormat)
  113. xmlWriter.WriteAttributeString("DateTimeLogFormat", DateTimeFormat ?? string.Empty);
  114. if (EntityLogKind != EntityLogKind.Entity)
  115. xmlWriter.WriteAttributeString("EntityLog", EntityLogKind.ToString());
  116. if (SuppressCategory)
  117. xmlWriter.WriteAttributeString("SuppressCategory", XmlConvert.ToString(SuppressCategory));
  118. foreach (KeyValuePair<string, string> valuePair in Params)
  119. {
  120. xmlWriter.WriteStartElement("Param");
  121. xmlWriter.WriteAttributeString("Id", valuePair.Key);
  122. xmlWriter.WriteString(valuePair.Value);
  123. xmlWriter.WriteEndElement(); // Param
  124. }
  125. xmlWriter.WriteEndElement(); // ExternalLogWriterParams
  126. xmlWriter.WriteEndElement(); // Parameters
  127. xmlWriter.WriteEndElement(); // Output
  128. }
  129. /// <summary>
  130. /// Clones the object
  131. /// </summary>
  132. /// <returns></returns>
  133. public override object Clone()
  134. {
  135. return new LogConfigExternalLogWriterOutput(ExternalLogType, ExternalLogName, DateTimeFormat, EntityLogKind, SuppressCategory);
  136. }
  137. }
  138. }