using System;
using System.Text;
namespace Wayne.Lib.Log
{
///
/// An generic entry to be logged containing details regarding what to log,
/// the datetime and who was performing the logging etc.
///
/// This class is inherited by DebugLogEntry, EventLogEntry and ErrorLogEntry
/// which adds on more specific properties.
///
public class LogEntry
{
#region Fields
private readonly EntityCategory entityCategory;
private readonly DateTime dateTime;
private readonly UInt64 logEntryIndex;
private readonly object logObject;
private static DateTime startDateTime = DateTime.Now;
private static readonly int StartTick = Environment.TickCount;
#endregion
#region Constructors
///
/// Constructor.
///
/// The entity that performed the logging.
/// The object to log.
internal LogEntry(IIdentifiableEntity entity, object logObject)
: this(entity, logObject, string.Empty)
{
}
///
/// Constructor.
///
/// The entity that performed the logging.
/// The object to log.
/// The category of the log object.
internal LogEntry(IIdentifiableEntity entity, object logObject, object category)
{
#if WindowsCE
//since windows CE do not support milliseconds.
//this is added so we can get a better understanding of performance
//not exact and should probably be removed before production release
dateTime = startDateTime.AddMilliseconds(Environment.TickCount - StartTick);
#else
dateTime = DateTime.Now;
#endif
//if (Logger.GlobalLogEntryCounter != null)
// logEntryIndex = Logger.GlobalLogEntryCounter.GetNextValue();
this.logObject = logObject;
//if (Logger.IsClosed || Logger.DebugConfig == null)
//{
// entityCategory = new EntityCategory(entity, category);
//}
//else
//{
// entityCategory = Logger.DebugConfig.GetEntityCategory(entity, category);
//}
}
#endregion
#region Properties
///
/// The EntityCategory that performed the logging.
///
public EntityCategory EntityCategory
{
get { return entityCategory; }
}
///
/// The object to log.
///
public object LogObject
{
get { return logObject; }
}
///
/// The date time of the logging.
///
public DateTime DateTime
{
get { return dateTime; }
}
#endregion
#region Methods: AppendTextToStringBuilder
///
/// Appends the object to log to a StringBuilder-output.
///
/// The logwriter to be used for logging.
/// The StringBuilder.
/// The indent to be used if many lines.
/// Is this the first line to log?
/// A string holding a generated indent-text (=a number of spaces). Use AppendIndent() to append the indent.
internal virtual void AppendToStringBuilder(LogWriter logWriter, StringBuilder output,
int indentLength, ref bool isFirstLine, ref string indent)
{
StringLogObject.AppendObjectToStringBuilder(logObject, output, logWriter, indentLength, ref isFirstLine, ref indent);
}
///
/// Returns the datetime as a string, using the given date time format.
///
/// The requested date time format.
///
public string GetDateTimeString(string dateTimeFormat)
{
//return Logger.DateTimeToString(dateTime, dateTimeFormat, logEntryIndex);
return "";
}
#endregion
#region Debug methods
///
/// Presents the class as a string.
///
///
public virtual string ToString(string format, IFormatProvider provider)
{
return string.Concat("LogEntry EntityCategory=", entityCategory, ", LogObject=", (logObject != null) ? logObject.ToString() : "null");
}
///
/// Presents the class as a string using the specified culture-specific format information.
///
///
public virtual string ToString(IFormatProvider provider)
{
return ToString(string.Empty, provider);
}
///
/// Presents the class as a string using a format string.
///
///
public virtual string ToString(string format)
{
return ToString(format, System.Globalization.CultureInfo.InvariantCulture);
}
///
/// Presents the class as a string using a format string and the specified culture-specific format information.
///
///
public override string ToString()
{
return ToString(string.Empty, System.Globalization.CultureInfo.InvariantCulture);
}
#endregion
}
}