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