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