using System; using System.Collections.Generic; using System.Xml; namespace Wayne.Lib.Log { /// /// External logwriter output definition /// public class LogConfigExternalLogWriterOutput : LogConfigOutput { private string dateTimeFormat; /// /// Parameters as key/value pairs. /// public readonly Dictionary Params = new Dictionary(); /// /// Log type of the external logger /// public string ExternalLogType { get; set; } /// /// Name of the external logger. /// public string ExternalLogName { get; set; } /// /// DateTime format to use /// public string DateTimeFormat { get { return dateTimeFormat; } set { dateTimeFormat = value; isDefaultDateTimeFormat = (dateTimeFormat == null); if (isDefaultDateTimeFormat) dateTimeFormat = Logger.DefaultDateTimeFormat; } } /// /// How to log the entity /// public EntityLogKind EntityLogKind { get; set; } /// /// Should the category be suppressed. /// public bool SuppressCategory { get; set; } private bool isDefaultDateTimeFormat; internal const string XmlType = "ExternalLogWriter"; /// /// Constructor /// public LogConfigExternalLogWriterOutput() { DateTimeFormat = null; // To make it default date time format. } /// /// Constructor /// /// /// /// /// /// public LogConfigExternalLogWriterOutput(string externalLogType, string externalLogName, string dateTimeFormat, EntityLogKind entityLogKind, bool suppressCategory) { ExternalLogType = externalLogType; ExternalLogName = externalLogName; DateTimeFormat = dateTimeFormat; EntityLogKind = entityLogKind; SuppressCategory = suppressCategory; } /// /// Deserialization constructor /// /// /// internal LogConfigExternalLogWriterOutput(XmlNode parametersNode, string ns) { XmlNode externalLogWriterParamsNode = parametersNode["ExternalLogWriterParams", ns]; XmlAttribute externalLogTypeAttribute = externalLogWriterParamsNode.Attributes["ExternalLogType"]; XmlAttribute externalLogNameAttribute = externalLogWriterParamsNode.Attributes["ExternalLogName"]; ExternalLogType = externalLogTypeAttribute.Value; ExternalLogName = externalLogNameAttribute.Value; XmlAttribute dateTimeLogFormatAttribute = externalLogWriterParamsNode.Attributes["DateTimeLogFormat"]; isDefaultDateTimeFormat = (dateTimeLogFormatAttribute == null); if (dateTimeLogFormatAttribute != null) DateTimeFormat = dateTimeLogFormatAttribute.Value; else DateTimeFormat = Logger.DefaultDateTimeFormat; XmlAttribute entityLogAttribute = externalLogWriterParamsNode.Attributes["EntityLog"]; if (entityLogAttribute != null) EntityLogKind = (EntityLogKind)Enum.Parse(typeof(EntityLogKind), entityLogAttribute.Value, false); else EntityLogKind = EntityLogKind.Entity; XmlAttribute suppressCategoryAttribute = externalLogWriterParamsNode.Attributes["SuppressCategory"]; if (suppressCategoryAttribute != null) SuppressCategory = XmlConvert.ToBoolean(suppressCategoryAttribute.Value); else SuppressCategory = false; } /// /// Serialization /// /// internal override void WriteXml(XmlWriter xmlWriter) { xmlWriter.WriteStartElement("Output"); xmlWriter.WriteAttributeString("Type", XmlType); xmlWriter.WriteStartElement("Parameters"); xmlWriter.WriteStartElement("ExternalLogWriterParams"); xmlWriter.WriteAttributeString("ExternalLogType", ExternalLogType ?? string.Empty); xmlWriter.WriteAttributeString("ExternalLogName", ExternalLogName ?? string.Empty); if (!isDefaultDateTimeFormat) xmlWriter.WriteAttributeString("DateTimeLogFormat", DateTimeFormat ?? string.Empty); if (EntityLogKind != EntityLogKind.Entity) xmlWriter.WriteAttributeString("EntityLog", EntityLogKind.ToString()); if (SuppressCategory) xmlWriter.WriteAttributeString("SuppressCategory", XmlConvert.ToString(SuppressCategory)); foreach (KeyValuePair valuePair in Params) { xmlWriter.WriteStartElement("Param"); xmlWriter.WriteAttributeString("Id", valuePair.Key); xmlWriter.WriteString(valuePair.Value); xmlWriter.WriteEndElement(); // Param } xmlWriter.WriteEndElement(); // ExternalLogWriterParams xmlWriter.WriteEndElement(); // Parameters xmlWriter.WriteEndElement(); // Output } /// /// Clones the object /// /// public override object Clone() { return new LogConfigExternalLogWriterOutput(ExternalLogType, ExternalLogName, DateTimeFormat, EntityLogKind, SuppressCategory); } } }